AES加密算法简介及Go库介绍|Go主题月

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: AES(Advanced Encryption Standard)的中文名叫高级加密标准,又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于 2001 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。

网络异常,图片无法展示
|

什么是AES


AES(Advanced Encryption Standard)的中文名叫高级加密标准,又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于 2001 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。

该算法为比利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,结合两位作者的名字,以 Rijndael 为名投稿高级加密标准的甄选流程。

以上说明来自维基百科。

AES 特性

在 AES 标准规范中,分组长度只能是 128 位,也就是说,每个分组为 16 个字节(每个字节 8 位)

秘钥长度

  • 128 位:一般记为 AES-128,一字节 8 比特位,就是秘钥长度为 16 字节,分组长度为 16 字节,加密 10 轮
  • 192 位:一般记为 AES-192,一字节 8 比特位,就是秘钥长度为 24 字节,分组长度为 16 字节,加密 12 轮
  • 256 位:一般记为AES-128,一字节 8 比特位,就是秘钥长度为 32 字节,分组长度为 16 字节,加密 14 轮

工作模式

参考资料:github.com/openssl/ope…

  • 电码本模式 ECB(Electronic Codebook Book):这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密,最后进行拼接。
  • 密码分组链接模式 CBC (Cipher Block Chaining):这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
  • 计算器模式 CTR (Counter):**计算器模式不常见,在 CTR 模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长的情况下,密钥只能使用一次。
  • ...

填充模式

  • NoPadding:数据长度不对齐时使用 0 填充,否则不填充
  • PKCS7Padding:假设数据长度需要填充 n(n>0) 个字节才对齐,那么填充 n 个字节,每个字节都是 n ;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小
  • PKCS5Padding:PKCS7Padding 的子集,块大小固定为 8 字节。
  • ...

AES 加密大致流程

首先会将明文以16字节一组,然后分成诺干租。但是有时明文长度不是 16 的倍数时怎么办呢?

这时候就可以用填充模式来把明文填充到 16 的倍数

然后按所选择的工作模式进行加密

按秘钥长度来决定进行几轮加密

Go 标准库

在 Go 中,官方提供了 crypto/aes 标准库来给我们进行加密,官方说明是这样的:

The AES operations in this package are not implemented using constant-time algorithms. An exception is when running on systems with enabled hardware support for AES that makes these operations constant-time. Examples include amd64 systems using AES-NI extensions and s390x systems using Message-Security-Assist extensions. On such systems, when the result of NewCipher is passed to cipher.NewGCM, the GHASH operation used by GCM is also constant-time.

大致意思就是说这个库并没有指定模式,我们用的时候可以用 cipher 来选择加密模式


目录
相关文章
|
2月前
|
算法 安全 数据安全/隐私保护
Crypto++库支持多种加密算法
【10月更文挑战第29天】Crypto++库支持多种加密算法
107 4
|
4月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
87 1
|
6天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
35 12
|
2月前
|
算法 关系型数据库 MySQL
分布式唯一ID生成:深入理解Snowflake算法在Go中的实现
在分布式系统中,确保每个节点生成的 ID 唯一且高效至关重要。Snowflake 算法由 Twitter 开发,通过 64 位 long 型数字生成全局唯一 ID,包括 1 位标识位、41 位时间戳、10 位机器 ID 和 12 位序列号。该算法具备全局唯一性、递增性、高可用性和高性能,适用于高并发场景,如电商促销时的大量订单生成。本文介绍了使用 Go 语言的 `bwmarrin/snowflake` 和 `sony/sonyflake` 库实现 Snowflake 算法的方法。
60 1
分布式唯一ID生成:深入理解Snowflake算法在Go中的实现
|
2月前
|
存储 安全 算法
AES算法
【10月更文挑战第30天】AES算法
120 2
|
3月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
217 1
|
4月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
166 1
|
3月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
157 0
|
4月前
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
108 0
|
4月前
|
算法 安全 Serverless
超级好用的C++实用库之国密sm3算法
超级好用的C++实用库之国密sm3算法
157 0