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 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加解密相关推荐
- aes js 加盐值 解密_cryptoJS AES 加解密简单使用
简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...
- nodejs php aes加密解密,nodejs aes 加解密实例
如下所示: 'use strict'; const crypto = require('crypto'); /** * AES加密的配置 * 1.密钥 * 2.偏移向量 * 3.算法模式CBC * 4 ...
- aes js 加盐值 解密_crypto-js aes加密解密
安装 npm install crypto-js --save unit.js import CryptoJS from "crypto-js"; //秘钥 const CRYPT ...
- java php aes加密解密_php aes 加密解密可与java对接
php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...
- php文件aes128解密工具,aes加密解密
aes加密解密类 使用方法:$str = Aes:: encrypt(json_encode(array('111'=>'test')),$key); 文件:<?php class Aes ...
- BASE64加密解密---前端 AES 加密解密
在做项目的时候,要求base64加密传输,和java后端试了很多,就这个比较合适 首先先下包 npm i crypto-js --save 封装 import CryptoJS from " ...
- DES加密解密与AES加密解密
× 目录 [1]AES加密算法和DES加密算法的效率比较 [2]AES和DES加密解密代码 随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了 ...
- java aes 256 ecb解密_Java AES 256 解密
题目描述 我用JAVA在實行解密,參考了c#的範例,加密沒有問題 KEY和IV都是相同的 题目来源及自己的思路 相关代码 JAVA的代碼public static String decrypt(Str ...
- C语言实现AES加解密算法
C语言实现AES加解密算法 AES加解密 AES加解密 #include <stdio.h> #include <stdint.h> #include <memory.h ...
- (三)Kotlin加密/解密之AES和DES
Kotlin加密/解密系列 (一)Kotlin加密/解密之ASCII码 (二)Kotlin加密/解密之凯撒加密算法 文章目录 Kotlin加密/解密系列 前言 一.加密算法 二.Base64编码 1. ...
最新文章
- mysql中 课程1比课程2成绩高_小菜菜mysql练习解读分析1——查询 01 课程比 02 课程成绩高的学生的信息及课程分数......
- java hibernate详细_Java事务管理学习之Hibernate详细介绍
- 从“小”培养AI安全意识:OpenAI开源最新强化学习训练工具,安全约束自由定制,开箱即用...
- php中的interface和implements及其他
- 数据库开发——MySQL——多表查询
- 【Python】Matplotlib使用字符串代替变量绘制散点图
- mysql面试题2020_2020年MySQL数据库面试题
- 在reader中勾选pdf复选框_轻松控制PDF文件的打开方式
- 每日一句:We are a happy crew in our office.
- 22021成都市高考成绩查询,四川大学本科教务系统登录
- tp ajax 多图上传,TP5 Ajax上传图片
- at/atq/atrm
- GWAS生物学相关名词解释
- pytorch加载VGG16及进行fine-tuning训练
- 华为手机总是弹出风险提示
- 小雉配置--支持向上向下兼容的 配置文件 兼容性 设计
- linux触摸板开关快捷键,Ubuntu增加快捷键打开或关闭触摸板
- python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...
- idea 分支管理插件_git flow 分支管理idea 具体操做
- .Net Core 源码解析
热门文章
- java输入身高体重计算体脂率_追求健康的体脂率,比追求体重数更有意义:一个公式教你计算...
- 逆向破解必备基础smail基础语法
- 【天光学术】美术论文:湖南传统雕刻艺术的表现形式与特点(节选)
- sht20中写用户寄存器_哪位帮忙看看下,程序读取SHT20 的温度时就不行,无ACK反馈了...
- 3D扫描打开眼镜定制新纪元
- 模板消息php 群发,微信公众号模板消息群发php代码示例
- 机器视觉培训教程-如何选择合适的灯源
- python timepicker_Android DatePicker和TimePicker:时间日期选择器
- Android闹钟TimePicker,android – TimePicker getHours(),API 15中的getMinutes
- 低资源和跨语言NER任务的新进展:词级别数据增强技术