分组密码是另一种对称加密算法。OpenSSL库中的分组密码也具有一致的接口,使用起来也很简单。下面以AES算法为例演示OpenSSL库中分组密码的使用方法。
温馨提示:由于本文包含程序代码,建议在PC端打开本文,获得更好阅读体验。
#include #include #include int main(){ unsigned char key[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; //AES算法的分组长度位16字节 unsigned char msg[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }; unsigned char cipher[AES_BLOCK_SIZE]; unsigned char recover[AES_BLOCK_SIZE]; //AES加密测试 AES_KEY aes_enc_key; //设置密钥 AES_set_encrypt_key(key, sizeof(key)*8, &aes_enc_key); //加密消息msg,密文存放在cipher中 AES_encrypt(msg, cipher, &aes_enc_key); size_t i; printf("msg:"); for(i = 0; i < AES_BLOCK_SIZE; ++i){ printf("%02x",msg[i]); } printf("\n"); printf("cipher:"); for(i = 0; i < AES_BLOCK_SIZE; ++i){ printf("%02x",cipher[i]); } printf("\n"); //AES解密测试 AES_KEY aes_dec_key; //设置密钥 AES_set_decrypt_key(key, sizeof(key)*8, &aes_dec_key); //解密cipher,明文存放在recover中 AES_decrypt(cipher, recover, &aes_dec_key); printf("recover:"); for(i = 0; i < AES_BLOCK_SIZE; ++i){ printf("%02x",recover[i]); } printf("\n"); return 0;}
编译程序:
gcc test.c -o test.exe -lcrypto
运行程序:
./test.exe
程序输出结果:
msg:101112131415161718191a1b1c1d1e1fcipher:07feef74e1d5036e900eee118e949293recover:101112131415161718191a1b1c1d1e1f
其中,msg为原始消息,cipher为msg加密后的密文,recover为cipher解密后的明文。
程序说明:
(1)AES_KEY aes_enc_key;
定义一个与AES算法状态相关的变量(指密钥扩展产生的轮密钥)。
(2)AES_set_decrypt_key(...);
初始化aes_enc_key变量。
(3)AES_encrypt(...);
执行加密。
与OpenSSL库相关的文章链接:
(1)OpenSSL库在Linux系统下的安装和测试
(2)使用OpenSSL库中的哈希函数
(3)使用OpenSSL库中的流密码算法
如果对密码编程感兴趣,可扫码加入下面的微信群: