博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenSSL中HMAC,MD5以及对称加密算法的应用
阅读量:4582 次
发布时间:2019-06-09

本文共 2085 字,大约阅读时间需要 6 分钟。

HMAC和MD5:

 

  1. HMAC的使用:
    #include 
    unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, const unsigned char *d, int n, unsigned char *md, unsigned int *md_len);
    其中第一个参数指定HMAC中所使用的具体的散列算法,在这里我们使用sha1(输出是160bit),因此在调用时第一个参数应为EVP_sha1()。key和key_len顾名思义分别是密钥存储的首地址和密钥的字节数目。d和n分别指定了被散列的数据的起始地址和字节数目。md表示散列后的结果存放的目标地址,md_len指向的int被用来记录md的字节数目(在这里是160bit即20个字节)。
  2. MD5的使用:
    #include 
    unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);
    d和n分别指定了被散列的数据的起始地址和字节数目。md存放散列结果(128bit即16个字节)。

对称加密算法的使用(EVP通用加密接口):

 

 

  1. 函数原型说明见http://www.openssl.org/docs/crypto/EVP_EncryptInit.html#
  2. 示例代码:
    #include 
    #include
    #define DATA_LEN 32#define EVP_MAX_KEY_LENGHT 64int main(){ EVP_CIPHER_CTX ctx; unsigned char key[EVP_MAX_KEY_LENGHT] = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0\x61\x1b\xbb\x3e\x20\x25\xa4\x5a"; unsigned char iv[EVP_MAX_KEY_LENGHT] = "\x56\x2e\x17\x99\x6d\x09\x3d\x28\xdd\xb3\xba\x69\x5a\x2e\x6f\x58"; unsigned char out[1024] = {0}; int outl, tmp, i; unsigned char msg[1024] = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"; //初始化加密上下文 EVP_CIPHER_CTX_init(&ctx); //第二个参数选择了密钥长度为128bit的aes加密算法(cbc模式)第三个参数意义不明一般置为NULL,后面两个参数分别是密钥首地址和初始向量首地址 EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(),NULL, key, iv); //outl存放被加密后的数据的字节数 outl = 0; //out存放加密后的数据,outl存放加密后数据字节数,msg是被加密数据的首地址,DATA_LEN是被加密数据的长度 EVP_EncryptUpdate(&ctx, out, &outl, msg, DATA_LEN); //加密算法默认会进行block padding 但是如果输入刚好是blocksize的整数倍则不需要进行final操作,这里aes的blocksize为16字节,所以输入有2块 //EVP_EncryptFinal_ex(&ctx, out + outl, &tmp); //outl = outl + tmp; //清理加密上下文 EVP_CIPHER_CTX_cleanup(&ctx); //显示数据 for(i = 0; i < DATA_LEN; i++) printf("%02x ", out[i]); return 0;}
  3. 解密过程和加密类似,只是函数名字稍有区别,不再赘述。

 

转载于:https://www.cnblogs.com/xt2357/p/4022813.html

你可能感兴趣的文章
scrum立会报告+燃尽图(第三周第三次)
查看>>
[SQL] 获取 Microsoft SQL Server 2008 的数据表结构
查看>>
iOS进度指示器——NSProgress
查看>>
C语言strcat,ctrcpy函数原型和改进
查看>>
good bye 2015 B - New Year and Old Property
查看>>
(第4篇)hadoop之魂--mapreduce计算框架,让收集的数据产生价值
查看>>
万年历-农历-农历日期
查看>>
如何辞职
查看>>
SSO 单点登录总结(PHP)
查看>>
Ubuntu16.04下将hadoop2.7.3源代码导入到eclipse neon中
查看>>
朝令夕改的企业不值得留恋
查看>>
springboot踩坑出坑记
查看>>
ovs源码阅读--netlink使用
查看>>
php中引用&的真正理解-变量引用、函数引用、对象引用
查看>>
cmake编译安装mysql 5.6.12
查看>>
第七章学习小结
查看>>
GS LiveMgr心跳管理类
查看>>
设计模式学习笔记(二)之观察者模式、装饰者模式
查看>>
mysql导出数据库和恢复数据库代码
查看>>
走出软件泥潭 第一回 雪上加霜
查看>>