go加解密系列——DES加解密

des是一种对称加密,常见的加解密模式有:ECB、CBC、CTR、OFB、CFB,常见的填充模式有:NoPadding、ZeroPadding、PKCS5Padding、PKCS7Padding

加解密模式对IV的要求
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)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值