/**//* 基于RSA的数字签名和验证C#源码
* (采用字符串作为参数)RSA_Demo3
*
* 夏春涛 Email:xChuntao@163.com
* Blog:http://bluesky521.cnblogs.com
* 运行环境:.net2.0 framework
*/
/**//* 备注:
* 若要使用公钥系统对消息进行数字签名,发送方先向该消息应用哈希函数以创建消息摘要。
* 然后,发送方用自己的私钥对消息摘要进行加密,以创建发送方的个人签名。在收到消息和
* 签名后,接收方使用发送方的公钥解密该签名,以恢复消息摘要,并使用发送方所用的同一
* 哈希算法对该消息进行哈希运算。如果接收方计算的消息摘要与从发送方收到的消息摘要完
* 全匹配,则接收方可以假定消息在传输中未被更改。请注意,因为发送方的公钥是公共知识,
* 所以任何人都可以验证签名。
*/
using System;
using System.Security.Cryptography;
using System.Text;
class RSACSPSample
{
static void Main()
{
try
{
string str_DataToSign = @"Data to Sign!Data to Sign!Data to Sign!";
Console.WriteLine("原文:" + str_DataToSign);
Console.WriteLine("长度:" + str_DataToSign.Length.ToString());
Console.WriteLine();
RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();
string str_Private_Key = Convert.ToBase64String( RSAalg.ExportCspBlob(true) );
string str_Public_Key = Convert.ToBase64String( RSAalg.ExportCspBlob(false) );
Console.WriteLine("公钥:" + str_Public_Key);
Console.WriteLine();
Console.WriteLine("私钥:" + str_Private_Key);
Console.WriteLine();
string str_SignedData = HashAndSign(str_DataToSign, str_Private_Key);// Hash and sign the data.
Console.WriteLine("签名数据:" + str_SignedData);
Console.WriteLine();
if (VerifySignedHash(str_DataToSign, str_SignedData, str_Public_Key))
{
Console.WriteLine("验证签名OK.");
}
else
{
Console.WriteLine("签名不匹配!");
}
Console.WriteLine();
}
catch (ArgumentNullException)
{
Console.WriteLine("The data was not signed or verified");
}
}
//对数据签名
public static string HashAndSign(string str_DataToSign, string str_Private_Key)
{
ASCIIEncoding ByteConverter = new ASCIIEncoding();
byte[] DataToSign = ByteConverter.GetBytes(str_DataToSign);
try
{
RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();
RSAalg.ImportCspBlob( Convert.FromBase64String(str_Private_Key) );
byte[] signedData = RSAalg.SignData(DataToSign, new SHA1CryptoServiceProvider());
string str_SignedData = Convert.ToBase64String(signedData);
return str_SignedData;
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
//验证签名
public static bool VerifySignedHash(string str_DataToVerify, string str_SignedData, string str_Public_Key)
{
byte[] SignedData = Convert.FromBase64String(str_SignedData);
ASCIIEncoding ByteConverter = new ASCIIEncoding();
byte[] DataToVerify = ByteConverter.GetBytes(str_DataToVerify);
try
{
RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();
RSAalg.ImportCspBlob( Convert.FromBase64String(str_Public_Key) );
return RSAalg.VerifyData(DataToVerify, new SHA1CryptoServiceProvider(), SignedData);
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return false;
}
}
}
附件:/Files/bluesky521/RSA_Demo.rar
基于RSA的数字签名和验证C#源码
时间: 2024-10-13 13:50:00
基于RSA的数字签名和验证C#源码的相关文章
数据库建模 数据库-基于web的数据库建模系统的源码!重谢!!!!!!!发邮箱1439943801@qq.com
问题描述 基于web的数据库建模系统的源码!重谢!!!!!!!发邮箱1439943801@qq.com 求基于web的数据库建模系统的源码!网页版的数据库建模平台,最简单的就行我重谢!!!!!!!发邮箱1439943801@qq.com
基于jQuery实现的扇形定时器附源码下载_jquery
效果图如下所示: 效果演示 源码下载 Pietimer是一个可以在页面上生成一个扇形变化的定时器,它基于jQuery,可以自定义定时时间秒数,自定义扇形的颜色.宽度和高度等,并且支持定时结束时回调函数,可以控制开始和暂停,适用于需要定时器的页面如在线考试.限时抢购的场景. HTML 首先加载jquery库文件和pietimer.js文件. <script src="jquery.min.js"></script> <script src="jq
基于jQuery实现选取月份插件附源码下载_jquery
这是一个基于jQuery的可以选择年份和月份的月份拾取插件,你可以设置点击页面上的任意元素触发弹出年月选择面板,可以是一个链接也可以是一个输入框,广泛应用于月份查询,而无需设置select表单. 效果展示 源码下载 HTML 首先将monthpicker插件相关的css和js文件载入,大家可以到源码下载里下载css和js文件. <link rel="stylesheet" type="text/css" href="jquery.m
一文详解如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)
引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用tensorflow实现了一下,感觉和之前使用的theano还是有很大的区别,有必要总结mark一下. 模型说明 这个分类的模型其实也是很简单,主要就是一个单层的LSTM模型,当然也可以实现多层的模型,多层的模型使用Tensorflow尤其简单,下面是这个模型的图 简单解释一下这个图,每个word经过embedding之后,进入LSTM层,这里LSTM是
基于jsp实现新闻管理系统 附完整源码_JSP编程
很棒的新闻发布系统分享给大家,希望大家喜欢. 下面就让我们来说一说基于jsp的新闻发布系统,其中使用的技术有JavaBean.fillter.数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除.修改.或者继续增加新的文章,最后还能够进行查询功能,其中引用了百度编辑器,能够进行图文并茂的编辑,极大地方便用户的使用. 注:完整项目下载地址:新闻发布系统 一.效果演示 首先让我们来看一看实现的效果: 下面是登陆的首界面: 图1 首界面 管理员登录页面: 图2 管理员登录界面 下面是
网站验证-求源码 大神在那里 出来告诉我 感谢了
问题描述 求源码 大神在那里 出来告诉我 感谢了 求网站登录注册的源码能存进oracle数据库 能判定是否为空什么的. 感谢了 解决方案 http://www.docin.com/p-681020663.html 解决方案二: 楼上的猫大神 人家要的是简单的登录记录源代码 你给他这个 笑死
基于Ajax asp的留言板示例源码
ajax.asp <% dim conn,rs dim connstr dim sqlcmd '创建数据库教程连接对象并打开 set conn=server.createobject("adodb.connection") connstr="provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("guestbook.mdb") conn.open connst
ym——android源码大放送(实战开发必备)
文件夹 PATH 列表 卷序列号为 000A-8F50 E:. │ javaapk.com文件列表生成工具.bat │ 使用说明.txt │ 免费下载更多源码.url │ 目录列表.txt │ ├─android web应用 │ jqmDemo_static.zip │ jqmMobileDemo-master.zip │ jqmMobileDemo1_1-master.zip │ Location1014.rar │ ├─anko │
C#源码500份
C Sharp 短信发送平台源代码.rar http://1000eb.com/5c6v ASP.NET+AJAX基础示例 视频教程 http://1000eb.com/89jc C# Winform qq弹窗 360弹窗 http://1000eb.com/89jf 精华志 C#高级编程(第七版)源码 http://1000eb.com/89k3 C#网络应用编程教案及代码.rar http://1000eb.com/89kh IPhone远程桌面xp控制+Desktop+Connect教程