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
|
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月前
|
JSON Go 开发者
go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。
43 4
|
2月前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
123 1
|
2月前
|
存储 Cloud Native Shell
go库介绍:Golang中的Viper库
Viper 是 Golang 中的一个强大配置管理库,支持环境变量、命令行参数、远程配置等多种配置来源。本文详细介绍了 Viper 的核心特点、应用场景及使用方法,并通过示例展示了其强大功能。无论是简单的 CLI 工具还是复杂的分布式系统,Viper 都能提供优雅的配置管理方案。
|
2月前
|
存储 安全 算法
AES算法
【10月更文挑战第30天】AES算法
120 2
|
2月前
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
22 3
|
2月前
|
JSON 监控 安全
go语言选择合适的工具和库
【10月更文挑战第17天】
17 2
|
2月前
|
存储 Go PHP
Go语言中的加解密利器:go-crypto库全解析
在软件开发中,数据安全和隐私保护至关重要。`go-crypto` 是一个专为 Golang 设计的加密解密工具库,支持 AES 和 RSA 等加密算法,帮助开发者轻松实现数据的加密和解密,保障数据传输和存储的安全性。本文将详细介绍 `go-crypto` 的安装、特性及应用实例。
102 0