登录
原创

golang版本的3DES 加解密

发布于 2023-01-30 阅读 2810
  • Go
  • DES
原创

之前在网上找的很多资料都不能直接进行使用,后来看了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
}


评论区

眉上的汗水,眉下的泪水,你总要选择一样

0

0

0

举报