栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go加解密系列——AES加解密

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go加解密系列——AES加解密

AES是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之,投稿高级加密标准的甄选流程。

常见的加解密模式有: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

aes-cbc-pkcs7加密示例:
package main

import (
	"fmt"
	"github.com/agclqq/goencryption"
)

var plainText = []byte("lovegoencryption")
var key = []byte("qwertyui12345678poiuytre")  //Key的长度16, 24, 32 分别对应 AES-128, AES-192, AES-256
var iv = []byte("poiuytre12345678")

func main() {
	//使用aes-cbc-pkcs7进行加密
	cryptText, err := goencryption.AesCBCPkcs7Encrypt(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
	}
	//使用aes-cbc-pkcs7进行解密
	text, err := goencryption.AesCBCPkcs7Decrypt(cText, key, iv)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("%sn", text)
}

输出

zq2IUVtrb0U8CeePzoNBlsmlV9WvW2xo
lovegoencryption

其他更多方法可参考 github.com/agclqq/goencryption/aes.go

更便利的 EasyEncrypt / EasyDecrypt:
package main

import (
	"fmt"
	"github.com/agclqq/goencryption"
)

var plainTextStr = "lovegoencryption"
var keyStr = "qwertyui12345678poiuytre"
var ivStr = "poiuytre12345678"

func main() {
	//使用aes-cbc-pkcs7进行加密,并用base64输出
	cryptText, err := goencryption.EasyEncrypt("aes/cbc/pkcs7/base64", plainTextStr, keyStr, ivStr)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(cryptText)

	//使用base64转码,并用aes-cbc-pkcs7进行解密
	text, err := goencryption.EasyDecrypt("aes/cbc/pkcs7/base64", cryptText, keyStr, ivStr)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(text)
}

输出

5LO0iKiy3wcmb+7cP0j73h1hXiDHPjbgVGNAPWWidnQ=
lovegoencryption

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号