流密码是一种对称加密算法。与哈希函数一样,OpenSSL库中的流密码也具有一致的接口,使用起来也很简单。下面以RC4算法为例演示OpenSSL库中流密码的使用方法。
温馨提示:由于本文包含程序代码,建议在PC端打开本文,获得更好阅读体验。
#include #include #include void print_hex(unsigned char *str, int len){ int i; for(i = 0; i < len; ++i){ printf("%02X", str[i]); } printf("\n");}int main(){ //流密码RC4使用示例 unsigned char key[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; unsigned char msg[] = "I like cryptography."; unsigned char cipher[sizeof(msg)-1]; unsigned char recover[sizeof(msg)-1]; printf("msg:"); print_hex(msg, sizeof(msg)-1); //打印原消息 //加密 RC4_KEY ctx_enc; RC4_set_key(&ctx_enc, sizeof(key), key); //设置密钥 RC4(&ctx_enc, sizeof(msg)-1, msg, cipher); //加密 printf("cipher:"); print_hex(cipher, sizeof(cipher)); //打印密文 //解密 RC4_KEY ctx_dec; RC4_set_key(&ctx_dec, sizeof(key), key); //设置密钥 RC4(&ctx_dec, sizeof(cipher), cipher, recover); //解密 printf("recover:"); print_hex(recover, sizeof(recover)); //打印解密结果 return 0;}
执行程序,输出结果如下:
msg:49206C696B652063727970746F6772617068792Ecipher:A0BC2C902C8739AF74A2E7B261BA582EA319F871recover:49206C696B652063727970746F6772617068792E
其中,msg为原始消息,cipher为msg加密后的密文,recover为cipher解密后的明文。
程序说明:
(1)RC4_KEY ctx_enc;
定义一个与RC4算法状态相关的变量。
(2)RC4_set_key(&ctx_enc, sizeof(key), key);
初始化已定义的ctx_enc变量。
(3)RC4(&ctx_enc, sizeof(msg)-1, msg, cipher);
执行加密。
与OpenSSL库相关的文章链接:
(1)OpenSSL库在Linux系统下的安装和测试
(2)使用OpenSSL库中的哈希函数
如果对密码编程感兴趣,可扫码加入下面的微信群: