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. Android之属性动画(一)

    一.概述 Android平台中常用的动画主要有两类,一类是View动画,一类是3.0后新增的属性动画.属性动画与View动画相比功能更加强大,主要体现在以下两个方面: 1.  属性动画不仅仅能应用到V ...

  2. AndroidManifest 中android:exported

    假设Service等的AndroidManifest中声明为android:exported="false" 则该服务不可以跨进程使用.         Permission De ...

  3. php过滤文字中的表情字符和mysql服务端对emoji的支持

    1.过滤emoji表情的原因 在我们的项目开发中,emoji表情是个麻烦的东西,即使我们可以能存储,也不一定能完美显示,因为它的更新速度很快:在iOS以外的平台上,例如PC或者android.如果你需 ...

  4. ComboxEdit 重要属性

    DisplayMember="ComboItemName" ValueMember="ComboItemCode"IsTextEditable="Tr ...

  5. C# 使用Newtonsoft.Json序列化自定义类型

    Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Linq To JSON可以快速的读写Json,通过JsonSerializ ...

  6. Idea代码可视化插件

    Idea代码可视化插件 https://plugins.jetbrains.com/plugin/7324-code-iris

  7. javascript获取数组种最大值?

    Array.prototype.max = function () { return Math.max.apply({}, this) } Array.prototype.min = function ...

  8. leetcode笔记:Sqrt(x)

    一. 题目描写叙述 Implement int sqrt(int x). Compute and return the square root of x. 二. 题目分析 该题要求实现求根公式,该题还 ...

  9. Discuz常见大问题-如何自定义单个页面

    比如我们先做一个最简单的网站的最后一页关于我们(插入了一幅图片,同时加入了几行文字) 先做好两个页面的文件(php页面是负责解析htm页面的,目前这两个页面都是空的) mypage_about.php ...

  10. Windows 8提升普通管理员权限为超级管理员权限以及激活超级管理员Administrator

    在Windows 8下运行某些操作时(比如删除一些文件或者更改某些系统设置时)系统会提示我们权限不够.须要Administrator账户的权限. 相信很多其它的使用者都会觉得自己当前使用的账户已经是系 ...