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

目录
相关文章
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
351 1
|
12月前
|
存储 SQL 开发框架
c# erp源码(简单进销存)
c# erp源码(简单进销存)
586 1
|
存储 Oracle 关系型数据库
PACS源码,C#语言数字医学影像系统成品源码
**数字医学影像系统(RIS/PACS)**采用C#开发,基于C/S架构,配Oracle数据库,具备自主版权,适用于项目实施。系统包含分诊、超声、放射、内镜、病理等工作站,支持基本信息维护、报表查询和系统维护。功能亮点有:WorkList管理、影像采集传输、存储检索、图像处理、多序列浏览、流程控制、报告录入与审核、支持多种影像设备及高级影像处理。RIS与PACS数据库同步,并集成HIS、电子病历等系统接口。全面遵循DICOM3.0标准。
330 1
PACS源码,C#语言数字医学影像系统成品源码
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
303 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
BI 数据处理
一体化的医学实验室信息系统源码,C#LIS系统源码
面向医学实验室的一体化平台提供标本流程管理、报告发布及科室管理支持。它与HIS无缝对接,简化患者信息录入,实现检验结果实时同步。系统自动处理数据、分类样本、计算参考范围,并对异常结果预警。条码管理简化样本追踪,质控管理提升检测准确性。平台还支持数据审核发布、历史结果查询对比、灵活报表打印及统计分析等功能,辅助科室管理和试剂库存控制,加强科室间沟通协作。
367 0
一体化的医学实验室信息系统源码,C#LIS系统源码
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
362 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
数据采集 监控 BI
C#实验室检验LIS信息系统源码 微生物检验、质控维护
LIS系统的主要目标是为检验室开展检验工作提供更加有效的系统支持。该系统将尽量减少以人工操作的方式来实现信息转移,减少在接收检验项目、报告结果和保存记录等工作中可能会出现的人为误差,为检验结果查询提供更有效的方法,节省了管理信息所需的琐碎时间和精力。为实验室技术人员提供智能化的运行模式,使处理诸如按照规程审核检验结果、取消检验项目、分析、处理存在重大疑问的检验结果、执行特殊的命令和处理质量控制等问题更轻松自如,这将使检验人员更快地获得准确清晰的检验结果。为临床医护人员提供在线设施,使他们可以及时准确地获得相关实验室信息。确保检验结果的可靠性和准确性,利用实验室管理信息系统的仪器监控和质量控制,
234 0
|
存储 安全 Oracle
C#检验科lis实验室信息管理系统源码
LIS是全院信息化建设的一个重要组成部分,其主要功能是将检验的实验仪器传出的检验数据经分析后,生成检验报告,通过网络存储在数据库中,使医生能够方便、及时的看到患者的检验结果,LIS已经成为现代化医院管理中必不可少的一部分。有助于提高实验室的整体管理水平,减少漏洞,提高检验质量。
173 1
|
监控 C#
技术经验解读:【转】c#实现魔兽(warIII)中显血和改键功能(附源码)(不影响聊天打字)
技术经验解读:【转】c#实现魔兽(warIII)中显血和改键功能(附源码)(不影响聊天打字)
412 0
|
存储 开发框架 前端开发
C#开发的全套成熟的LIS系统源码JavaScript+SQLserver 2012区域云LIS系统源码
医院云LIS系统是一套成熟的实验室信息管理系统,目前已在多家三级级医院应用,并不断更新。云LIS系统是为病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标,将医学检验、科室管理和财务统计等检验科室/实验室所有工作进行整合,全面改善检验科室/实验室的工作现状。
185 0