前言

从本文开始,打算写下AES加密,这里只是从使用的角度,原理需要密码学的知识,我是万万看不懂的。事情的起因很简单,在之前的文章网络监测服务之获取ping丢包率中我提到

被监测节点到web站点之间用kcptun通讯,这种方式使用UDP快速,另外我不会加密tcp socket,直接用kcptun来做加密了。

但是相关节点已经有kcptun服务运行了(你懂的),我也不想在运行一个kcptun进程,所以打算将节点之间传输的包含敏感信息的内容加密。所以找了一些用C语言实现的AES库。

AES的参数

关于AES的基本知识,可以去维基百科看看相关介绍,这里不再详细展开。

放一张AES的思维导图
AES-Mind.png

首先,使用相同的密码进行加密,就能在不同平台上得到同样的结果,这个想法是错误的。AES加密涉及到很多参数,不仅仅是密码这一个参数。

本文指的AES,默认指的是Rijndael,参数有以下5个:

key length(密钥位数,密码长度)

AES128AES192AES256(128 位、192 位或 256 位)
128位对应的是16个字节,所以部分平台库上,会使用16个字符或者长度为16的字符串来做密码。同理,192位就是24个字节,256位就是32个字节。

key (密钥,密码)

key指的就是密码了,AES128就是128位的,如果位数不够,某些库可能会自动填充到128。

IV (向量)

IV称为初始向量,使用不同的IV加密后的字符串是不同的,加密和解密需要相同的IV。对于IV,应当随机生成,每次加密使用的IV应当不同。

mode (加密模式)

AES分为几种模式,比如ECBCBCCFB等等,这些模式除了ECB由于没有使用IV而不太安全,其他模式差别并没有太明显。

padding (填充方式)

对于加密解密两端需要使用同一的PADDING模式,大部分PADDING模式为PKCS5, PKCS7, NOPADDING

标签: none

评论已关闭