以太坊Whisper协议中,默认的对称加密使用的是AES-GCM加密算法。
AES是一种对称加密算法,它的相关概念在此不赘述。
GCM ( Galois/Counter Mode) 指的是该对称加密采用Counter模式,并带有GMAC消息认证码。
在详细介绍AES-GCM之前,我们先了解一些相关概念。
https://blog.csdn.net/T0mato_/article/details/53160772
1、准备
// AesKey 密钥
var AesKey string = "HQECux7Tt6UrGOUl"
// nonce 初始向量
nonce, _ := hex.DecodeString("000000010000010000000010")
2、辅助函数
func getKeys() ([]byte) {
return []byte(AesKey)
}
func getBlock() cipher.Block {
key := getKeys()
block, err := aes.NewCipher(key)
if err != nil {
panic(err.Error())
}
return block
}
func getNonce() []byte {
nonce, err := hex.DecodeString(Gsm_IV)
if err != nil {
panic(err.Error())
}
return nonce
}
3、encrypt
func encrypt(data string) (string) {
block := getBlock()
nonce := getNonce()
aesgcm, err := cipher.NewGCM(block)
if err != nil {
panic(err.Error())
}
cipherText := aesgcm.Seal(nil, nonce, []byte(data), nil)
return fmt.Sprintf("%x", cipherText)
}
4、decrypt
func decrypt(data string) string {
cipherText, _ := hex.DecodeString(data)
nonce := getNonce()
block := getBlock()
aesgcm, err := cipher.NewGCM(block)
if err != nil {
panic(err.Error())
}
plaintext, err := aesgcm.Open(nil, nonce, cipherText, nil)
if err != nil {
panic(err.Error())
}
return fmt.Sprintf("%x", plaintext)
}
网友评论