关于 16位和32位 md5得到的是一个16字节的散列值 每个字节用16进制(0x**)格式成两个字符,连起来得到一个32个字符的串这就是所说的32位。16位就是取的32位的中间段
md5(aabbccdd) 32位 = bf3b2290e229da2ba272a81c602ea88d
md5(aabbccdd) 16位 = e229da2ba272a81c
使用openssl的md5有两种方式
第一种 为非连缓的字符串准备的 多次调用MD5_Update最后通过MD5_Final得到最终的md5值
int MD5_Init(MD5_CTX *c);
int MD5_Update(MD5_CTX *c, const void *data, size_t len);
int MD5_Final(unsigned char *md, MD5_CTX *c);
第二种 直接得到结果 函数源代码里面其实也是直接调用的 MD5_Init MD5_Update MD5_Final
unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
#include <openssl/md5.h>
#include <stdio.h>
#include <string>
#include <string.h>
int main()
{
unsigned char MD5result[16];
std::string src = "aabbccddee";
std::string md5 = "";
std::string md5_16 = "";
char temp[33] = {};
MD5((const unsigned char*)src.c_str(), src.size(), MD5result);
for(int i = 0; i < 16; ++i)
{
snprintf(temp, 10, "%02x", MD5result[i]);
md5 += temp;
if(i >= 4 && i <= 11)
md5_16 += temp;
}
printf("src:%s\nmd5 32位:%s\nmd5 16位: %s\n", src.c_str(), md5.c_str(), md5_16.c_str());
return 0;
}
g++ -g -o openssl_md5 openssl_md5.cpp -I/usr/include/openssl -lssl -lcrypto -L/usr/lib64
亿速云提供多种品牌、不同类型SSL证书签发服务,包含:域名型、企业型、企业型专业版、增强型以及增强型专业版,单域名SSL证书300元/年起。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。