突然找到数年前写的这段代码,当是因为对密码学几乎不怎么了解踩了一些坑,现在开源出来方便大家直接利用。

ECDSA的全名是Elliptic Curve DSA,也就是椭圆曲线DSA,由于椭圆曲线的复杂性是的其具备良好的安全性,也就是说无法从公钥计算出私钥。

签名过程分为以下两步:
第一步:对于一段指定的字符串,首先对其做消息摘要。在示例代码中采用256bit的摘要,也就是以下部分:

EVP_MD_CTX md_ctx;
EVP_MD_CTX_init(&md_ctx);
EVP_DigestInit(&md_ctx,EVP_sha256());
EVP_DigestUpdate(&md_ctx, (const void*)szBufferData,nBufferData);
EVP_DigestFinal(&md_ctx, digest, &dgst_len);

第二步:通过产生一个随机数,记为K,然后利用其计算出两个大数,记为R和S。将R和S拼在一起就是对消息摘要的签名数据。

由于K是随机产生,所以经常出现同一段数据,同一个私钥,产生的签名文件不一样。其实这也很容易理解,因为每次加密K也未必一样。

那么验证的过程就是从签名数据中分离出R和S,然后利用公钥和S计算出R,如果和接收的R相等,那表示验证成功,否则失败。

以上是简单的介绍签名以及验证过程,具体可以参见详细代码。其中包括产生公私钥对并保存文件,以及对数据或者文件签名,验证过程。具体实现代码我已经封装到指定类当中了,使用示例如下:

 CECDSAManager ecdsaManager;
if (ECDSA_SUCESS == ecdsaManager.CreateECDSAKey("E:"))
{
if (ECDSA_SUCESS == ecdsaManager.ECDSASignFileToLicenceFile("E://ec_key.pem","D://ffmpeg解码.JPG","D://1.sig"))
{
if (ECDSA_SUCESS == ecdsaManager.ECDSAVerifyLicenceFile("E://public.pem","D://ffmpeg解码.JPG","D://1.sig"))
{
printf("Sucess \n");
}
}
}

以下代码可以在VS2010中编译运行,源码下载:ECDSATestProj.zip

使用openssl实现ECDSA签名以及验证功能(附完整测试源码)的更多相关文章

  1. 用Openssl计算ECDSA签名

    ECDSA的全名是Elliptic Curve DSA,即椭圆曲线DSA.它是Digital Signature Algorithm (DSA)应用了椭圆曲线加密算法的变种.椭圆曲线算法的原理很复杂, ...

  2. DotNetOpenAuth Part 1 : Authorization 验证服务实现及关键源码解析

    DotNetOpenAuth 是 .Net 环境下OAuth 开源实现框架.基于此,可以方便的实现 OAuth 验证(Authorization)服务.资源(Resource)服务.针对 DotNet ...

  3. MVVM架构~knockoutjs系列之表单添加(验证)与列表操作源码开放

    返回目录 本文章应该是knockoutjs系列的最后一篇了,前几篇中主要讲一些基础知识,这一讲主要是一个实际的例子,对于一个对象的添加与编辑功能的实现,并将项目源代码公开了,共大家一起学习! knoc ...

  4. 完美实现类似QQ的自拍头像、上传头像功能!(Demo 源码)

    现在很多下载客户端程序都需要设定自己头像的功能,而设定头像一般有两种方式:使用摄像头自拍头像,或者选择一个图片的某部分区域作为自己的头像. 一.相关技术 若要实现上述的自拍头像和上传头像的功能,会碰到 ...

  5. Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

    注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...

  6. Shiro安全框架入门篇(登录验证实例详解与源码)

    转载自http://blog.csdn.net/u013142781 一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和J ...

  7. Android开发之Navigationdrawer导航抽屉功能的实现(源码分享)

    导航抽屉(navigationdrawer)是一个从屏幕左边滑入的面板,用于显示应用的主要导航项目.用户能够通过在屏幕左边缘滑入或者触摸操作栏的应用图标打开导航抽屉. 导航抽屉覆盖在内容之上,但不覆盖 ...

  8. Android开发之发送邮件功能的实现(源码分享)

    Android开发中可能会碰到怎样发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法.总共同拥有3种把,我细致阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰.我今天就来分享下我 ...

  9. php获取ssl验证的https页面的源码

    $response = "https://faculty.xidian.edu.cn/system/resource/tsites/tsitesencrypt.jsp?id=_tsites_ ...

随机推荐

  1. .pyc是个什么鬼?

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  2. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  3. .NET 开发快捷键大全

    序号 快捷键 说明 1 Ctrl + Tab 切换当前编辑视图 2 Ctrl + Shift + Tab 反向切换当前编辑视图 3 F7 将窗体设计视图转成其代码视图 4 Shift + F7 将代码 ...

  4. IOC框架整体介绍

    1.Castle Windsor 2.Autofac 3.Unity 4.Spring.NET 5.StructureMap 6.Ninject

  5. 一次完整的HTTP请求流程

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接: 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接, ...

  6. yum提示This system is not registered with RHN.RHN support will be disabled.

    [root@cactiez ~]# yum install mlocateLoading "security" pluginLoading "rhnplugin" ...

  7. Ajax跨域访问

    Ajax如何跨域访问数据 最近在做项目的过程中遇到的问题,一个网站需要访问另外一个网站的数据,并且是通过脚本的方式,而由于同源策略的限制,开发人员不能再与外部服务器进行通信的时候使用XMLHttpRe ...

  8. Microsoft Dynamics AX 2012: How to get Company,Customer and Vendor address in AX 2012

    Scenario:  “How to get Addresses of “Customer, Vendor and Company” 1)      First we need to identify ...

  9. Phoenix -修复表索引

    索引的修复可以通过2种方式,(关于pehoenix的索引的生命周期可以参考  https://community.hortonworks.com/articles/58818/phoenix-inde ...

  10. XXX esx.problem.syslog.nonpersistent.formatOnHost not found XXX

    ESXi 主机的摘要选项卡报告以下错误:配置问题:XXX esx.problem.syslog.nonpersistent.formatOnHost 未找到 XXX (2101811)   Sympt ...