之前在网上找的很多资料都不能直接进行使用,后来看了Java版本的源码进行debug追踪,golang版本的3des加密解密才算成功,这里我已经将注意事项在代码里面进行了说明。
这个版本使用的是github.com/forgoer/openssl包,感觉还是挺好用的。但是看文档的话,有可能也会翻车。以下是我的使用代码。
import (
"encoding/base64"
"fmt"
"github.com/forgoer/openssl"
)
func Des3Encrypt(plaintTxt string, key string) (encryptTxt string, err error) {
keyBytes, err := base64.StdEncoding.DecodeString(key)
if err != nil {
fmt.Println("3Des加密发生错误1err:", err)
return
}
//注意⚠️,Des3ECBEncrypt函数的第二个参数是key的字节数组,但是一定不要直接使用[]byte(key),
//而是需要将keybase64.StdEncoding.DecodeString
//然后得到的才是24个字节的key,不然会报错
decrypt, err := openssl.Des3ECBEncrypt([]byte(plaintTxt), keyBytes, openssl.PKCS5_PADDING)
if err != nil {
fmt.Println("3Des加密发生错误2err:", err)
return
}
plaintTxt = base64.StdEncoding.EncodeToString(decrypt)
fmt.Println(plaintTxt)
return
}
func Des3Decrypt(decryptStr string, key string) (plaintTxt string, err error) {
keyBytes, err := base64.StdEncoding.DecodeString(key)
if err != nil {
fmt.Println("3Des解密发生错误1err:", err)
return
}
bs, err := base64.StdEncoding.DecodeString(decryptStr)
if err != nil {
fmt.Println("3Des解密发生错误2err:", err)
return
}
//注意⚠️,Des3ECBEncrypt函数的第二个参数是key的字节数组,但是一定不要直接使用[]byte(key),
//而是需要将keybase64.StdEncoding.DecodeString
//然后得到的才是24个字节的key,不然会报错
//第一个参数同样也要先进行base64解码
decrypt, err := openssl.Des3ECBDecrypt(bs, keyBytes, openssl.PKCS5_PADDING)
if err != nil {
fmt.Println("err:" + err.Error())
return
}
plaintTxt = string(decrypt)
return
}