上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。