des是一种对称加密,常见的加解密模式有:ECB、CBC、CTR、OFB、CFB,常见的填充模式有:NoPadding、ZeroPadding、PKCS5Padding、PKCS7Padding
ECB | 不需要IV |
CBC | 需要IV |
CTR | 需要IV |
OFB | 需要IV |
CFB | 需要IV |
NoPadding | 原始数据不补位,要求原始数据长度必须符合当前加密算法的block的整数倍,否则会报错。优点是,当原始数据长度固定,生成的密文长度最小。 |
ZeroPadding | 用0补位,缺点是无法区分当前的0是原始数据,还是补位数据 |
PKCS5Padding | 缺N位补N值。缺点是补位是固定8位,无法适当当前算法的block大小 |
PKCS7Padding | 缺N位补N值。以当前算法的block大小进行动态计算补位大小,适用性广 |
安装:
go get github.com/agclqq/goencryption
des-cbc-pkcs7加密示例:
package main
import (
"fmt"
"github.com/agclqq/goencryption"
)
var plainText =[]byte("lovegoencryption")
var key=[]byte("qwertyui")
var iv=[]byte("poiuytre")
func main(){
//使用des-cbc-pkcs7进行加密
cryptText,err:=goencryption.DesCBCPkcs7Encrypt(plainText,key,iv)
if err!=nil{
fmt.Println(err)
return
}
//将不可打印密文转为base64输出
out:=goencryption.Base64Encode(cryptText)
fmt.Println(out)
//将out解码为原始密文
cText,err:=goencryption.Base64Decode(out)
if err!=nil{
fmt.Println(err)
return
}
//使用des-cbc-pkcs7进行解密
text,err:=goencryption.DescCBCPkcs7Decrypt(cText,key,iv)
if err!=nil{
fmt.Println(err)
return
}
fmt.Printf("%s\n",text)
}
输出:
tsuyO6IEV/VCvJ14aC2l/OT6GmFqZ91W
lovegoencryption
des-cfb-pkcs7加密示例:
package main
import (
"fmt"
"github.com/agclqq/goencryption"
)
var plainText =[]byte("lovegoencryption")
var key=[]byte("qwertyui")
var iv=[]byte("poiuytre")
func main(){
//使用des-cfb-pkcs7进行加密
cryptText,err:=goencryption.DesCFBPkcs7Encrypt(plainText,key,iv)
if err!=nil{
fmt.Println(err)
return
}
//将不可打印密文转为base64输出
out:=goencryption.Base64Encode(cryptText)
fmt.Println(out)
//将out解码为原始密文
cText,err:=goencryption.Base64Decode(out)
if err!=nil{
fmt.Println(err)
return
}
//使用des-cfb-pkcs7进行解密
text,err:=goencryption.DesCFBPkcs7Decrypt(cText,key,iv)
if err!=nil{
fmt.Println(err)
return
}
fmt.Printf("%s\n",text)
}
输出:
/bvE+BSEnbVZwUqGVqKzpBfDWWaSTnNS
lovegoencryption
其他更多方法可参考 github.com/agclqq/goencryption/des.go
更便利的 EasyEncrypt / EasyDecrypt:
package main
import (
"fmt"
"github.com/agclqq/goencryption"
)
var plainTextStr = "lovegoencryption"
var keyStr = "qwertyui"
var ivStr = "poiuytre"
func main() {
//使用des-cbc-pkcs7进行加密,并用base64输出
cryptText, err := goencryption.EasyEncrypt("des/cbc/pkcs7/base64", plainTextStr, keyStr, ivStr)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(cryptText)
//使用base64转码,并用des-cbc-pkcs7进行解密
text, err := goencryption.EasyDecrypt("des/cbc/pkcs7/base64", cryptText, keyStr, ivStr)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(text)
}