openssl md5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openssl md5相关的知识,希望对你有一定的参考价值。

关于 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


以上是关于openssl md5的主要内容,如果未能解决你的问题,请参考以下文章

Linux环境下使用openssl库的MD5进行数据加密

使用 Crypto 将 PHP openssl_encrypt 与 md5 转换为 NodeJS

从OpenSSL库中分离算法-MD5算法

openssl md5 sha256 rsa des

PHP 将 mcrypt 转换为 openssl

openssl evp 哈希算法(md5,sha1,sha256)