go言語は対称暗号化アルゴリズムを独自に設計し、hello worldを暗号化し、復号する.
本文は作者のオリジナルで、転載は出典を明記してください:https://blog.csdn.net/qq_34560344
go言語は対称暗号化アルゴリズムを独自に設計し、hello worldを暗号化し、復号する.
対称暗号化アルゴリズムは、非対称暗号化アルゴリズムに対して使用される.両者の違いは、対称暗号化は、暗号化および復号化の際に同じ鍵を使用し、対称暗号化ではなく、暗号化および復号化の際に異なる鍵、すなわち公開鍵および秘密鍵を使用することである.一般的なDES、3 DES、AESは対称暗号化アルゴリズムであり、RSA、楕円曲線暗号化アルゴリズムは非対称暗号化アルゴリズムである.
go言語は対称暗号化アルゴリズムを独自に設計し、hello worldを暗号化し、復号する.
対称暗号化アルゴリズムは、非対称暗号化アルゴリズムに対して使用される.両者の違いは、対称暗号化は、暗号化および復号化の際に同じ鍵を使用し、対称暗号化ではなく、暗号化および復号化の際に異なる鍵、すなわち公開鍵および秘密鍵を使用することである.一般的なDES、3 DES、AESは対称暗号化アルゴリズムであり、RSA、楕円曲線暗号化アルゴリズムは非対称暗号化アルゴリズムである.
//
func EnCrypt(orig, key []byte) string {
// , sum orig
sum := 0
for i := 0; i < len(key); i++ {
sum += int(key[0])
}
//
var pkcs_code = PKCS5Padding(orig, 8)
// ,
for j := 0; j < len(pkcs_code); j++ {
pkcs_code[j] += byte(sum)
}
return base64.StdEncoding.EncodeToString(pkcs_code)
}
//
func PKCS5Padding(orig []byte, size int) []byte {
//
length := len(orig)
padding := size - length % size
// byte padding
repeats := bytes.Repeat([]byte{byte(padding)}, padding)
return append(orig, repeats...)
}
//
func DeCrypt(text string, key []byte) string {
orig, err := base64.StdEncoding.DecodeString(text)
if err != nil {
return " "
}
sum := 0
for i := 0; i < len(key); i++ {
sum += int(key[0])
}
//
for j := 0; j < len(orig); j++ {
orig[j] -= byte(sum)
}
//
var pkcs_unCode = PKCS5UnPadding(orig)
return string(pkcs_unCode)
}
//
func PKCS5UnPadding(orig []byte) []byte {
//
var tail = int(orig[len(orig) - 1])
return orig[:(len(orig) - tail)]
}
func main() {
key := []byte("123456")
var enCryptCode = EnCrypt([]byte("hello world"), key)
fmt.Println(" :", enCryptCode)
var deCryptCode = DeCrypt(enCryptCode, key)
fmt.Println(" :", deCryptCode)
}