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 mainimport ("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("%s\n", text)
}

输出

zq2IUVtrb0U8CeePzoNBlsmlV9WvW2xo
lovegoencryption

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

更便利的 EasyEncrypt / EasyDecrypt:

package mainimport ("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

go加解密系列——AES加解密相关推荐

  1. aes js 加盐值 解密_cryptoJS AES 加解密简单使用

    简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...

  2. nodejs php aes加密解密,nodejs aes 加解密实例

    如下所示: 'use strict'; const crypto = require('crypto'); /** * AES加密的配置 * 1.密钥 * 2.偏移向量 * 3.算法模式CBC * 4 ...

  3. aes js 加盐值 解密_crypto-js aes加密解密

    安装 npm install crypto-js --save unit.js import CryptoJS from "crypto-js"; //秘钥 const CRYPT ...

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

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

  5. php文件aes128解密工具,aes加密解密

    aes加密解密类 使用方法:$str = Aes:: encrypt(json_encode(array('111'=>'test')),$key); 文件:<?php class Aes ...

  6. BASE64加密解密---前端 AES 加密解密

    在做项目的时候,要求base64加密传输,和java后端试了很多,就这个比较合适 首先先下包 npm i crypto-js --save 封装 import CryptoJS from " ...

  7. DES加密解密与AES加密解密

    × 目录 [1]AES加密算法和DES加密算法的效率比较 [2]AES和DES加密解密代码 随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了 ...

  8. java aes 256 ecb解密_Java AES 256 解密

    题目描述 我用JAVA在實行解密,參考了c#的範例,加密沒有問題 KEY和IV都是相同的 题目来源及自己的思路 相关代码 JAVA的代碼public static String decrypt(Str ...

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

    C语言实现AES加解密算法 AES加解密 AES加解密 #include <stdio.h> #include <stdint.h> #include <memory.h ...

  10. (三)Kotlin加密/解密之AES和DES

    Kotlin加密/解密系列 (一)Kotlin加密/解密之ASCII码 (二)Kotlin加密/解密之凯撒加密算法 文章目录 Kotlin加密/解密系列 前言 一.加密算法 二.Base64编码 1. ...

最新文章

  1. mysql中 课程1比课程2成绩高_小菜菜mysql练习解读分析1——查询 01 课程比 02 课程成绩高的学生的信息及课程分数......
  2. java hibernate详细_Java事务管理学习之Hibernate详细介绍
  3. 从“小”培养AI安全意识:OpenAI开源最新强化学习训练工具,安全约束自由定制,开箱即用...
  4. php中的interface和implements及其他
  5. 数据库开发——MySQL——多表查询
  6. 【Python】Matplotlib使用字符串代替变量绘制散点图
  7. mysql面试题2020_2020年MySQL数据库面试题
  8. 在reader中勾选pdf复选框_轻松控制PDF文件的打开方式
  9. 每日一句:We are a happy crew in our office.
  10. 22021成都市高考成绩查询,四川大学本科教务系统登录
  11. tp ajax 多图上传,TP5 Ajax上传图片
  12. at/atq/atrm
  13. GWAS生物学相关名词解释
  14. pytorch加载VGG16及进行fine-tuning训练
  15. 华为手机总是弹出风险提示
  16. 小雉配置--支持向上向下兼容的 配置文件 兼容性 设计
  17. linux触摸板开关快捷键,Ubuntu增加快捷键打开或关闭触摸板
  18. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...
  19. idea 分支管理插件_git flow 分支管理idea 具体操做
  20. .Net Core 源码解析

热门文章

  1. java输入身高体重计算体脂率_追求健康的体脂率,比追求体重数更有意义:一个公式教你计算...
  2. 逆向破解必备基础smail基础语法
  3. 【天光学术】美术论文:湖南传统雕刻艺术的表现形式与特点(节选)
  4. sht20中写用户寄存器_哪位帮忙看看下,程序读取SHT20 的温度时就不行,无ACK反馈了...
  5. 3D扫描打开眼镜定制新纪元
  6. 模板消息php 群发,微信公众号模板消息群发php代码示例
  7. 机器视觉培训教程-如何选择合适的灯源
  8. python timepicker_Android DatePicker和TimePicker:时间日期选择器
  9. Android闹钟TimePicker,android – TimePicker getHours(),API 15中的getMinutes
  10. 低资源和跨语言NER任务的新进展:词级别数据增强技术