基于RSA的数字签名和验证C#源码

简介: /**//* 基于RSA的数字签名和验证C#源码 * (采用字符串作为参数)RSA_Demo3 *  * 夏春涛 Email:xChuntao@163.com  * Blog:http://bluesky521.cnblogs.com * 运行环境:.net2.0 framework *//**//* 备注: * 若要使用公钥系统对消息进行数字签名,发送方先向该消息应用哈希函数以创建消息摘要。

/**/ /* 基于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

目录
相关文章
|
18天前
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
26 1
|
29天前
|
数据采集 安全 JavaScript
C#医院手术麻醉信息管理系统源码 对接院内HIS、LIS、PACS
手麻系统的功能涵盖了麻醉临床业务管理、麻醉运营业务管理以及手术进程管理等,实现了将多种麻醉病历文书与医院HIS系统的有效关联,让手术室人员、设备资源和信息资源高度共享;实现了手术安排、各种统计报表等科室管理和科研工作的需求,可借其收集临床数据、进行整合分析,为围术期临床信息、管理、科研提供整体解决方案;该系统的运行,为医护人员提供了流程化、信息化、自动化、智能化的临床业务综合管理。
32 5
|
1月前
|
前端开发 Java C#
java/C#语言开发的医疗信息系统11套源码
java/C#语言开发的医疗信息系统11套源码
22 1
|
1月前
|
传感器 数据采集 大数据
C#/BS手麻系统源码 手术麻醉管理系统源码 商业项目源码
手麻系统从麻醉医生实际工作环境和流程需求方面设计,与HIS,LIS,PACS,EMR无缝连接,方便查看患者的信息;实现术前、术中、术后手术麻醉信息全记录;减少麻醉医师在手术中填写麻醉记录单时间,证手术麻醉相关信息的准确性,有效降低医护人员的术中书写医疗文书的压力,使得麻醉医生在术中能够更加集中精力在病人的麻醉操作上,提升手术质量
19 2
|
1天前
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
7 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
14天前
|
存储 数据采集 安全
C#医院手术室麻醉信息管理系统源码 自动生成麻醉的各种医疗文书(手术风险评估表、手术安全核查表)
医院手术麻醉信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程,实现麻醉手术过程的信息数字化,自动生成麻醉的各种医疗文书,完成共享HIS、LIS、PACS和EMR等手术患者信息,从而提高麻醉、手术工作的管理水平。
24 3
|
17天前
|
存储 开发框架 前端开发
C#开发的全套成熟的LIS系统源码JavaScript+SQLserver 2012区域云LIS系统源码
医院云LIS系统是一套成熟的实验室信息管理系统,目前已在多家三级级医院应用,并不断更新。云LIS系统是为病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标,将医学检验、科室管理和财务统计等检验科室/实验室所有工作进行整合,全面改善检验科室/实验室的工作现状。
18 0
|
22天前
|
存储 安全 Oracle
C#检验科lis实验室信息管理系统源码
LIS是全院信息化建设的一个重要组成部分,其主要功能是将检验的实验仪器传出的检验数据经分析后,生成检验报告,通过网络存储在数据库中,使医生能够方便、及时的看到患者的检验结果,LIS已经成为现代化医院管理中必不可少的一部分。有助于提高实验室的整体管理水平,减少漏洞,提高检验质量。
23 1
|
26天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
22 0
|
1月前
|
C#
C#掌上医院预约挂号支付系统源码
医院微信预约挂号系统是一种基于微信平台的医疗服务系统,它利用微信的广泛覆盖和便捷性,为患者提供线上预约挂号的服务。通过该系统,患者可以使用自己的微信账号登录,浏览医院的医生排班信息,选择合适的医生和就诊时间进行预约。 医院微信预约挂号系统主要是让自费、医保患者在手机上就能实现就医全过程,实时自费、医保结算,同时还可以查询检查检验报告等就诊信息。
17 3