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加密解密相关推荐

  1. java php aes加密解密_php aes 加密解密可与java对接

    php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...

  2. android、ios、php之间AES加密解密

    使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...

  3. python 加密解密_python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...

  4. AES加密解密算法Java实现

    AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  5. openssl与cryptoAPI交互AES加密解密

    原文: http://blog.csdn.net/zhouyuqwert/article/details/7422467 有读者指出代码贴两遍,修改下. 继上次只有CryptoAPI的加密后,这次要实 ...

  6. c php aes加密解密,php的AES加密解密

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. $privateKey = "1234567812345678"; $ ...

  7. 理解AES加密解密的使用方法

    很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...

  8. C#中使用DES和AES加密解密

    代码 using System; using System.Text; using System.Security.Cryptography; using System.IO; namespace M ...

  9. C语言实现AES加密解密

    AES加密是美国联邦政府采用的一种块加密标准,如今已经被全世界广为使用.嵌入式开发中我们也经常会用到加密解密算法,如果没有硬件模块来实现,就需要用到C代码软件实现.下面介绍调用mbedTLS中的AES ...

  10. Javascript实现AES加密解密(ECB/CBC)

    环境配置 js文件https://code.google.com/archive/p/crypto-js/downloads 在线AES加密解密地址http://tool.chacuo.net/cry ...

最新文章

  1. 修改framework后重新刷入手机
  2. PS教程第四课:PS新建文档和像素
  3. 如何在 CentOS 7上安装和使用 Docker Compose
  4. 设计模式之不简单的工厂模式(一)
  5. NET中对象的构建过程
  6. Android4.0源码编译方法以及错误解决方案
  7. js模拟select控件
  8. 记一次微信APP支付开发返回-1的坑
  9. 谈谈坚持写博客的感悟
  10. revit二次开发概念_半天入门Revit二次开发
  11. php ppt read_PHP如何读取PPT?
  12. 视频编码中的PAFF和MBAFF的区别 转自:http://blog.csdn.net/kerryhung/article/details/4433256...
  13. Chaosblade 混动工程之网络延迟实践
  14. 数字逻辑——卡诺图化简练习题
  15. 电脑手机生产力提升操作
  16. pc端 移动端适配rem插件方式
  17. 写完的文档有多少个字?字数统计在word哪里
  18. Summary of Statistics for Interview
  19. 2019春第十二周作业
  20. jquery.print 时间_Jquery Jqprint—随着Jquery Jqprint实现网页打印

热门文章

  1. 结果公示!400名博硕士获“优秀学位论文”奖!
  2. WaitForSingleObject、WaitForMultipleObjects假死,永远等待的问题
  3. 微软拼音 输入法 个人 偏好设置
  4. Java 发送短信工具类
  5. ActiveX技术在IC卡读卡器中的应用
  6. 2009-2019年五级(到村/居委会)行政区划代码数据
  7. @SpringBootApplication注解的意思
  8. SGX Enable
  9. shanzhi -接小球游戏2.0
  10. 初识语音合成软件eSpeak