LV04-02-AES算法-02-AES算法实现
本文主要是AES算法——AES算法实现的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
PC端开发环境 | Windows | Windows11 |
Ubuntu | Ubuntu20.04.6的64位版本 | |
VMware® Workstation 17 Pro | 17.0.0 build-20800274 | |
终端软件 | MobaXterm(Professional Edition v23.0 Build 5042 (license)) | |
Win32DiskImager | Win32DiskImager v1.0 | |
Linux开发板环境 | Linux开发板 | 正点原子 i.MX6ULL Linux 阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) | |
linux内核 | linux-4.15(NXP官方提供) |
点击查看本文参考资料
- 通用
参考资料 | 相关链接 |
FIPS197 | 高级加密标准AES-FIPS197英文版 |
高级加密标准AES-FIPS197中文版 |
点击查看相关文件下载
--- | --- |
一、OpenSSL简介
AES这种加密算法在网上都是有多种开源库的,C语言版本、Java版本等等。我使用的是嵌入式平台,所以这里学习一下C语言平台AES加解密实现。
1. OpenSSL是什么
首先来了解一下OpenSSL,在计算机网络上,OpenSSL是一个开放原始码的软体函式库套件,应用程式可以使用这个套件来进行安全通讯,避免窃听,同时确认另一端连线者的身份。这个套件广泛被应用在网际网路的网页伺服器上。其主要函式库是以C语言所写成,实作了基本的加密功能,实作了SSL与TLS协定。OpenSSL可以运行在OpenVMS、 Microsoft Windows以及绝大多数类Unix作业系统上(包括Solaris,Linux,Mac OS X与各种版本的开放原始码BSD作业系统)。
OpenSSL计划在1998年开始,其目标是发明一套自由的加密工具,在网际网路上使用。OpenSSL以Eric Young以及Tim Hudson两人开发的SSLeay为基础,随著两人前往RSA公司任职,SSLeay在1998年12月停止开发。因此在1998年12月,社群另外分支出OpenSSL,继续开发下去。
2. 支持哪些算法?
OpenSSL支持许多不同的加密算法:
-
AES、Blowfish、Camellia、Chacha20、Poly1305、SEED(英语:SEED)、CAST-128(英语:CAST-128)、DES、IDEA、RC2(英语:RC2)、RC4、RC5、TDES、GOST 28147-89(英语:GOST (block cipher))、SM4
-
MD5、MD4、MD2、SHA-1、SHA-2、SHA-3、RIPEMD-160、MDC-2(英语:MDC-2)、GOST R 34.11-94(英语:GOST (hash function))、BLAKE2、Whirlpool、SM3
-
RSA、DSA、ECDSA、ECDHE、迪菲-赫尔曼密钥交换、椭圆曲线密码学、X25519、Ed25519(英语:EdDSA#Ed25519)、X448(英语:Curve448)、Ed448(英语:Curve448)、GOST R 34.10-2001、SM2
3. 源码在哪?
官网在这里:openssl.org
我们点开第一个OpenSSL Library,可以找到源码仓库:
然后就可以来到github源码仓库了:openssl/openssl: TLS/SSL and crypto library (github.com),仓库里面有多种加密的源码,我们所需要的AES算法源码在这里:
核心主要是这个aes_core.c文件。还有一些ecb、ofb等命名的文件,这些都是不同的加密模式,我这里就用了最基本的ecb模式,也就是直接使用aes_core.c中的函数即可。
二、使用实例
这里就不做具体分析了,详细的可以看这个仓库:openssl: openssl库学习 (gitee.com)
这个demo主要是用来解密和加密WAV格式的音频文件。