【Win10应用开发】签名与验证
对数据进行签名和验证,是为了防止数据被“盗版”。比较常规的做法是通过公钥进行验证。
算法上多用SAH_xxxx,就是哈希算法。由于MD5后来被发现存在“非唯一性”,你会发现现在很多一些下载的文件验证都用SHA1算法。比如我们下载一个系统.iso镜像,下载后可以核对一下哈希值,来判断文件是否完整且正确无误。
签名与验证操作并不复杂。在Windows.Security.Cryptography.Core命名空间下提供支持,像AsymmetricKeyAlgorithmProvider、MacAlgorithmProvider都可以用来生成签名的key。
本次我就以AsymmetricKeyAlgorithmProvider为例来演示,因为这厮可以生成公钥/私钥对,并且支持导入密钥的操作。签名后可以把key作为公钥导出,在验证时可以导入该公钥。
第一步,先得到一个AsymmetricKeyAlgorithmProvider实例,不用实例化,直接通过静态的OpenAlgorithm方法直接获得,参数是要使用的算法。
AsymmetricKeyAlgorithmProvider asymt = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.DsaSha1);
第二步,调用CreateKeyPair方法生成密钥对,参数为位数,一般的值为512、1024、2048、4096,此处我用512,正常无异常。
CryptographicKey key = asymt.CreateKeyPair();
另外,你还可以以公钥的形式导出,这样方便存储。
publicKey = key.ExportPublicKey();
第三步,可以对数据进行签名了。
IBuffer data = CryptographicBuffer.ConvertStringToBinary(txtInput.Text.Trim(), BinaryStringEncoding.Utf8);
signedData = CryptographicEngine.Sign(key, data);
CryptographicEngine类公开一系列方法,用来完成加解密,要进行签名,可调用Sign方法,或者异步等待的SignAsync方法。签名之后返回签名后的数据, 以IBuffer的形式存放。
数据签名后可以进行验证。
第一步,同样,需要获取一个AsymmetricKeyAlgorithmProvider实例。
AsymmetricKeyAlgorithmProvider asmt = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.DsaSha1);
第二步,导入公钥。调用ImportPublicKey方法就可以导入我们刚才导出的公钥。
CryptographicKey key = asmt.ImportPublicKey(publicKey);
导入成功后,直接可以返回一个CryptographicKey对象,下面可以直接用它来进行验证了。注意公钥必须与当初签名时导出的公钥相同,否则无法验证。
第三步,可以进行验证了。
IBuffer data = CryptographicBuffer.ConvertStringToBinary(txtVerifyInput.Text.Trim(), BinaryStringEncoding.Utf8);
// 注意,第三个参数是你刚才签名后得到的数据
bool b = CryptographicEngine.VerifySignature(key, data, signedData);
VerifySignature方法用于签名验证,第一个参数是公钥,前后必须一致;第二个参数是待验证的数据;第三个参数是前面签名后得到的数据。如果验证成功,返回true;不成功返回false。
===================================================
看看运行结果。

如果前后输入的内容相同,验证就会成功,如果前后输入的内容不同,验证就会失败。
【Win10应用开发】签名与验证的更多相关文章
- iOS使用Security.framework进行RSA 加密解密签名和验证签名
iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
- RSA加密解密及RSA签名和验证及证书
RSA加密解密及RSA签名和验证及证书 公钥是给别人的 发送密文使用公钥加密 验证签名使用公钥验证 私钥是自己保留的 接受密文使用私钥解密 发送签名使用私钥签名 上述过程逆转是不行的,比如使用私钥加密 ...
- WebApi基于Token和签名的验证
最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...
- Java 程序的打包、签名和验证
参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找到这个总入口 Java SE 8 Document ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- 使用openssl实现ECDSA签名以及验证功能(附完整测试源码)
突然找到数年前写的这段代码,当是因为对密码学几乎不怎么了解踩了一些坑,现在开源出来方便大家直接利用. ECDSA的全名是Elliptic Curve DSA,也就是椭圆曲线DSA,由于椭圆曲线的复杂性 ...
- Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构
分享两篇Win 10应用开发的XML文档结构:Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构. Win 10 开发中Adapt ...
- Xamarin Anroid开发教程之验证环境配置是否正确
Xamarin Anroid开发教程之验证环境配置是否正确 经过前面几节的内容已经把所有的编程环境设置完成了,但是如何才能确定所有的一切都处理争取并且没有任何错误呢?这就需要使用相应的实例来验证,本节 ...
随机推荐
- java中的锁
java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...
- SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)
前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...
- C++的内存泄漏检测
C++大量的手动分配.回收内存是存在风险的,也许一个函数中一小块内存泄漏被重复放大之后,最后掏空内存. 这里介绍一种在debug模式下测试内存泄漏的方法. 首先在文件的开头以确定的顺序写下这段代码: ...
- [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute
剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...
- [原]分享一下我和MongoDB与Redis那些事
缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...
- ASP.NET MVC关于Ajax以及Jquery的无限级联动
---恢复内容开始--- 第一次发表博文,发表博文的目的是巩固自己的技术,也能够共享给大家.写的不好的地方,希望大家多给给意见.老司机勿喷 数据结构() NewsTypeId 新闻ID, NewsTy ...
- 编译器开发系列--Ocelot语言7.中间代码
Ocelot的中间代码是仿照国外编译器相关图书Modern Compiler Implementation 中所使用的名为Tree 的中间代码设计的.顾名思义,Tree 是一种树形结构,其特征是简单, ...
- linux常用查看硬件设备信息命令
转载:http://blog.chinaunix.net/uid-26782198-id-3242120.html # uname -a # 查看内核/操作系统/CPU信息 ...
- Collections
2017-01-06 22:50:43 数据结构和算法 <如何学习数据结构?>:https://www.zhihu.com/question/21318658 <How do I ...
- 多用多学之Java中的Set,List,Map
很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...