openssl之EVP系列之9---EVP_Digest系列函数的一个样例

    ---依据openssl doc/crypto/EVP_DigestInit.pod翻译

    (作者:DragonKing, Mail: wzhah@263.net ,公布于: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");

     }

openssl之EVP系列之9---EVP_Digest系列函数的一个样例的更多相关文章

  1. OpenSSL EVP_Digest系列函数的一个样例

    #include <stdio.h>     #include <openssl/evp.h>         main(int argc, char *argv[])     ...

  2. openssl之EVP系列之1---算法封装

    openssl之EVP系列之1---算法封装     ---依据openssl doc/crypto/EVP.pod翻译和自己的理解写成     (作者:DragonKing, Mail: wzhah ...

  3. openssl之EVP系列之8---EVP_Digest系列函数具体解释

    openssl之EVP系列之8---EVP_Digest系列函数具体解释     ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成     (作 ...

  4. openssl之EVP系列之10---EVP_Sign系列函数介绍

    openssl之EVP系列之10---EVP_Sign系列函数介绍     ---依据openssl doc/crypto/EVP_SignInit.pod翻译     (作者:DragonKing, ...

  5. openssl之EVP系列之13---EVP_Open系列函数介绍

    openssl之EVP系列之13---EVP_Open系列函数介绍     ---依据openssl doc/crypto/EVP_OpenInit.pod翻译和自己的理解写成     (作者:Dra ...

  6. openssl之EVP系列之7---信息摘要算法结构概述

    openssl之EVP系列之7---信息摘要算法结构概述     ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成     (作者:Dragon ...

  7. openssl之EVP系列之12---EVP_Seal系列函数介绍

    openssl之EVP系列之12---EVP_Seal系列函数介绍     ---依据openssl doc/crypto/EVP_SealInit.pod翻译和自己的理解写成     (作者:Dra ...

  8. openssl之EVP系列之11---EVP_Verify系列函数介绍

    openssl之EVP系列之11---EVP_Verify系列函数介绍     ---依据openssl doc/crypto/EVP_VerifyInit.pod翻译和自己的理解写成     (作者 ...

  9. openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例

    openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例     ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay. ...

随机推荐

  1. SQL基础(四):SQL命令

    1.CREATE INDEX 语句 CREATE INDEX 语句用于在表中创建索引.在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引:在表中创建索引,以便更加快速高效地查询数据 ...

  2. FrameWork逆向工程之MotioPI

    在BI项目建设的过程中我们一般都是有备份的,而且这个是必须有的!特别是例如ETL Model,还有Data Model这一类的元数据,这些东西如果我们没有备份,而恰好的我们的开发模型又在某一天离我们而 ...

  3. Global and Local Coordinate Systems

    ansys 中的坐标系 整体和局部坐标系(主要在建模中涉及) 整体坐标系是以你建模的整个建筑为一体,来确定坐标系的.比如你建一个矩形平面的建筑,整体坐标系一般默认水平方向为X轴,竖直方向为Y轴,以垂直 ...

  4. X86-64寄存器和栈帧

    简介 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果.除此之外,它们还各自具有一些特殊功能.通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途, ...

  5. [Node.js]31. Level 7: Redis coming for Node.js, Simple Redis Commands

    Let's start practicing using the redis key-value store from our node application. First require the  ...

  6. 关于block的回调使用-防止内存泄露问题

    block 一般用于回调,比方请求数据我们把asi封装好,仅仅用block调数据就方便很多 获取到得数据假设要给之加入数据,切记不能够使用self.(这个数组) 或者_(这个数组) addObject ...

  7. Android 之布局(一)

    Android的布局类型: 主要有:LinearLayout(线性布局).RelativeLayout(相对布局).TableLayout(表格布局).AbsoluteLayout(绝对布局).Fra ...

  8. php之快速入门学习-12(超级全局变量)

    PHP 超级全局变量 超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用. PHP 超级全局变量 PHP中预定义了几个超级全局变量(superglo ...

  9. MVC MVP MVVM 图解

    1.MVC (1)图解 解释: 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 各部分之间的通信方式如下: View 传送指令到 Controll ...

  10. spring @Service()中初始化方法

    @Service(value = "xxxServiceImpl" xxxxxxxx) public class XXXSerivceImpl { public void init ...