1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Linux开发中 MD5值的计算

Linux开发中 MD5值的计算

时间:2022-02-22 05:21:16

相关推荐

Linux开发中 MD5值的计算

Go语言中crypto/md5包中提供了MD5计算的API,在Linux中,openssl库也提供了类似的接口,编译的时候加上链接选项-lcrypto 就可以使用了。

基本API有两种,一种是MD5(),另一种是分为三个部分,MD5_Init, MD5_Update, MD5_Final,这个适合长度不确定的数据计算:

#include <openssl/md5.h>//d存储待计算的数据,n表示数据的长度,如果md非空,则存储md5值。unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);//初始化int MD5_Init(MD5_CTX *c);//计算data中长度为len的MD5,当数据很大的情况下,可以分多次计算int MD5_Update(MD5_CTX *c, const void *data, unsigned long len);//得到累计的md5值int MD5_Final(unsigned char *md, MD5_CTX *c);

测试用例:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <openssl/md5.h>char *str2md5(const char *str, int length) {int n;MD5_CTX c;unsigned char digest[16];char *out = (char*)malloc(33);MD5_Init(&c);while (length > 0) {if (length > 512) {MD5_Update(&c, str, 512);} else {MD5_Update(&c, str, length);}length -= 512;str += 512;}MD5_Final(digest, &c);for (n = 0; n < 16; ++n) {snprintf(&(out[n*2]), 16*2, "%02x", (unsigned int)digest[n]);}return out;}int main(int argc, char **argv) {char *output = str2md5("hello", strlen("hello"));printf("%s\n", output);free(output);return 0;}

编译运行:

如果出现如下编译错误:

openssl/md5.h: No such file or directory解决方案:sudo apt-get install libpcap-dev libssl-dev

参考文档:

1./docs/manmaster/man3/MD5.html

2./questions/7627723/how-to-create-a-md5-hash-of-a-string-in-c

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。