Golang AES加密解密
Golang AES加密解密
package mainimport ("bytes""crypto/aes""crypto/cipher""encoding/base64""errors""fmt"
)//加密过程:
// 1、处理数据,对数据进行填充,采用PKCS7(当密钥长度不够时,缺几位补几个几)的方式。
// 2、对数据进行加密,采用AES加密方法中CBC加密模式
// 3、对得到的加密数据,进行base64加密,得到字符串
// 解密过程相反//16,24,32位字符串的话,分别对应AES-128,AES-192,AES-256 加密方法
//key不能泄露
var PwdKey = []byte("1234asdf1234asdf")//pkcs7Padding 填充
func pkcs7Padding(data []byte, blockSize int) []byte {//判断缺少几位长度。最少1,最多 blockSizepadding := blockSize - len(data)%blockSize//补足位数。把切片[]byte{byte(padding)}复制padding个padText := bytes.Repeat([]byte{byte(padding)}, padding)return append(data, padText...)
}//pkcs7UnPadding 填充的反向操作
func pkcs7UnPadding(data []byte) ([]byte, error) {length := len(data)if length == 0 {return nil, errors.New("加密字符串错误!")}//获取填充的个数unPadding := int(data[length-1])return data[:(length - unPadding)], nil
}//AesEncrypt 加密
func AesEncrypt(data []byte, key []byte) ([]byte, error) {//创建加密实例block, err := aes.NewCipher(key)if err != nil {return nil, err}//判断加密快的大小blockSize := block.BlockSize()//填充encryptBytes := pkcs7Padding(data, blockSize)//初始化加密数据接收切片crypted := make([]byte, len(encryptBytes))//使用cbc加密模式blockMode := cipher.NewCBCEncrypter(block, key[:blockSize])//执行加密blockMode.CryptBlocks(crypted, encryptBytes)return crypted, nil
}//AesDecrypt 解密
func AesDecrypt(data []byte, key []byte) ([]byte, error) {//创建实例block, err := aes.NewCipher(key)if err != nil {return nil, err}//获取块的大小blockSize := block.BlockSize()//使用cbcblockMode := cipher.NewCBCDecrypter(block, key[:blockSize])//初始化解密数据接收切片crypted := make([]byte, len(data))//执行解密blockMode.CryptBlocks(crypted, data)//去除填充crypted, err = pkcs7UnPadding(crypted)if err != nil {return nil, err}return crypted, nil
}//EncryptByAes Aes加密 后 base64
func EncryptByAes(data []byte, key []byte) (string, error) {res, err := AesEncrypt(data, key)if err != nil {return "", err}return base64.StdEncoding.EncodeToString(res), nil
}//DecryptByAes base64解码后 Aes 解密
func DecryptByAes(data string, key []byte) ([]byte, error) {dataByte, err := base64.StdEncoding.DecodeString(data)if err != nil {return nil, err}return AesDecrypt(dataByte, key)
}func main() {var origin = []byte("123456")//加密encrypt, _ := EncryptByAes(origin, PwdKey)//解密decrypt, _ := DecryptByAes(encrypt, PwdKey)//打印fmt.Printf("加密前: %s\n", origin)fmt.Printf("加密后: %s\n", encrypt)fmt.Printf("解密后:%s\n", decrypt)}
Golang AES加密解密相关推荐
- java php aes加密解密_php aes 加密解密可与java对接
php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...
- android、ios、php之间AES加密解密
使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...
- python 加密解密_python实现AES加密解密
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...
- AES加密解密算法Java实现
AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...
- openssl与cryptoAPI交互AES加密解密
原文: http://blog.csdn.net/zhouyuqwert/article/details/7422467 有读者指出代码贴两遍,修改下. 继上次只有CryptoAPI的加密后,这次要实 ...
- c php aes加密解密,php的AES加密解密
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. $privateKey = "1234567812345678"; $ ...
- 理解AES加密解密的使用方法
很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...
- C#中使用DES和AES加密解密
代码 using System; using System.Text; using System.Security.Cryptography; using System.IO; namespace M ...
- C语言实现AES加密解密
AES加密是美国联邦政府采用的一种块加密标准,如今已经被全世界广为使用.嵌入式开发中我们也经常会用到加密解密算法,如果没有硬件模块来实现,就需要用到C代码软件实现.下面介绍调用mbedTLS中的AES ...
- Javascript实现AES加密解密(ECB/CBC)
环境配置 js文件https://code.google.com/archive/p/crypto-js/downloads 在线AES加密解密地址http://tool.chacuo.net/cry ...
最新文章
- 修改framework后重新刷入手机
- PS教程第四课:PS新建文档和像素
- 如何在 CentOS 7上安装和使用 Docker Compose
- 设计模式之不简单的工厂模式(一)
- NET中对象的构建过程
- Android4.0源码编译方法以及错误解决方案
- js模拟select控件
- 记一次微信APP支付开发返回-1的坑
- 谈谈坚持写博客的感悟
- revit二次开发概念_半天入门Revit二次开发
- php ppt read_PHP如何读取PPT?
- 视频编码中的PAFF和MBAFF的区别 转自:http://blog.csdn.net/kerryhung/article/details/4433256...
- Chaosblade 混动工程之网络延迟实践
- 数字逻辑——卡诺图化简练习题
- 电脑手机生产力提升操作
- pc端 移动端适配rem插件方式
- 写完的文档有多少个字?字数统计在word哪里
- Summary of Statistics for Interview
- 2019春第十二周作业
- jquery.print 时间_Jquery Jqprint—随着Jquery Jqprint实现网页打印