WindowsC/C++加密解密实战
上QQ阅读APP看书,第一时间看更新

2.3.2 使用Cypto++进行AES加解密

前面我们通过Crypto++源码编译出来了一个静态库libcryptopp.a,现在开始使用它。

首先看一个例子,这个例子是直接用AES加密一个块,AES的数据块(分组)大小为128位,密钥长度可选择128位、192位或256位。直接用AES加密一个块很少用,因为我们平时都是加密任意长度的数据,需要选择CFB等加密模式。但是直接的块加密是对称加密的基础。

【例2.12】一个使用Crypto++库的例子

(1)在Windows下打开UE(或其他编辑器),然后输入代码如下:

代码中有几个地方需要注意一下:

AES并不是一个类,而是类Rijndael的一个typedef。

Rijndael虽然是一个类,但是其用法和Namespace很像,本身没有什么成员函数和成员变量,只是在类体里面定义了一系列的类和数据类型,真正能够进行加密解密的AESEncryption和AESDecryption都是定义在这个类内部的类。

AESEncryption和AESDecryption除了可以用SetKey()这个函数设置密钥外,在构造函数中也能设置密钥,参数和SetKey()是一样的。

ProcessAndXorBlock()可能会让人比较疑惑,函数名的意思是ProcessBlock和XorBlock,ProcessBlock就是对块进行加密或解密,XorBlock在各种加密模式中使用,这里我们不需要使用加密模式,因此把用来Xor操作的XorBlock设置为0,那么Xor操作就不起作用了。

(2)保存代码为test.cpp,上传到Linux,在命令行下编译并运行:

[root@localhost test]# g++ test.cpp -o test -I/root/soft/cryptopp610 -L/root/soft/cryptopp610 -lcryptopp
[root@localhost test]# ./test
AES Parameters:
Algorithm name: AES
Block size  : 128
Min key length: 128
Max key length : 256
77 6e 2c a5 2 17 7a 5b 19 e4 28 65 26 f3 7e 14
123456789

注意:目录名cryptopp610不要写成cryptoapp610。