|
|
openssl之EVP系列之9---EVP_Digest系列函数的一个例子 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
openssl之EVP系列之9---EVP_Digest系列函数的一个例子 ---根据openssl doc\crypto\EVP_DigestInit.pod翻译 (作者:DragonKing, Mail: [email protected] ,发布于:http://openssl.126.com 之openssl专业论坛,版本:openssl-0.9.7) 本例子是openssl帮助文档提供的。该例子根据命令行输入的信息摘要算法名字对"Test Message\n"和"Hello World\n"字符串进行信息摘要操作。 #include <stdio.h> #include <openssl/evp.h> main(int argc, char *argv[]) { EVP_MD_CTX mdctx; const EVP_MD *md; char mess1[] = "Test Message\n"; char mess2[] = "Hello World\n"; unsigned char md_value[EVP_MAX_MD_SIZE]; int md_len, i; //使EVP_Digest系列函数支持所有有效的信息摘要算法 OpenSSL_add_all_digests(); if(!argv[1]) { printf("Usage: mdtest digestname\n"); exit(1); } //根据输入的信息摘要函数的名字得到相应的EVP_MD算法结构 md = EVP_get_digestbyname(argv[1]); if(!md) { printf("Unknown message digest %s\n", argv[1]); exit(1); } //初始化信息摘要结构mdctx,这在调用EVP_DigestInit_ex函数的时候是必须的。 EVP_MD_CTX_init(&mdctx); //使用md的算法结构设置mdctx结构,impl为NULL,即使用缺省实现的算法(openssl本身提供的信息摘要算法) EVP_DigestInit_ex(&mdctx, md, NULL); //开始真正进行信息摘要运算,可以多次调用该函数,处理更多的数据,这里只调用了两次 EVP_DigestUpdate(&mdctx, mess1, strlen(mess1)); EVP_DigestUpdate(&mdctx, mess2, strlen(mess2)); //完成信息摘要计算过程,将完成的摘要信息存储在md_value里面,长度信息存储在md_len里面 EVP_DigestFinal_ex(&mdctx, md_value, &md_len); //使用该函数释放mdctx占用的资源,如果使用_ex系列函数,这是必须调用的。 EVP_MD_CTX_cleanup(&mdctx); printf("Digest is: "); for(i = 0; i < md_len; i++) printf("%02x", md_value[i]); printf("\n"); } 
|
|
相关文章:相关软件: |
|