天天看點

基于RSA的數字簽名和驗證C#源碼

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

/**//* 基于RSA的數字簽名和驗證C#源碼

基于RSA的數字簽名和驗證C#源碼

 * (采用字元串作為參數)RSA_Demo3

基于RSA的數字簽名和驗證C#源碼

 * 

基于RSA的數字簽名和驗證C#源碼

 * 夏春濤 Email:[email protected] 

基于RSA的數字簽名和驗證C#源碼

 * Blog:http://bluesky521.cnblogs.com

基于RSA的數字簽名和驗證C#源碼

 * 運作環境:.net2.0 framework

基于RSA的數字簽名和驗證C#源碼

 */

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

/**//* 備注:

基于RSA的數字簽名和驗證C#源碼

 * 若要使用公鑰系統對消息進行數字簽名,發送方先向該消息應用哈希函數以建立消息摘要。

基于RSA的數字簽名和驗證C#源碼

 * 然後,發送方用自己的私鑰對消息摘要進行加密,以建立發送方的個人簽名。在收到消息和

基于RSA的數字簽名和驗證C#源碼

 * 簽名後,接收方使用發送方的公鑰解密該簽名,以恢複消息摘要,并使用發送方所用的同一

基于RSA的數字簽名和驗證C#源碼

 * 雜湊演算法對該消息進行哈希運算。如果接收方計算的消息摘要與從發送方收到的消息摘要完

基于RSA的數字簽名和驗證C#源碼

 * 全比對,則接收方可以假定消息在傳輸中未被更改。請注意,因為發送方的公鑰是公共知識,

基于RSA的數字簽名和驗證C#源碼

 * 是以任何人都可以驗證簽名。

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

using System;

基于RSA的數字簽名和驗證C#源碼

using System.Security.Cryptography;

基于RSA的數字簽名和驗證C#源碼

using System.Text;

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

class RSACSPSample

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

{

基于RSA的數字簽名和驗證C#源碼

    static void Main()

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

        try

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            string str_DataToSign = @"Data to Sign!Data to Sign!Data to Sign!";

基于RSA的數字簽名和驗證C#源碼

            Console.WriteLine("原文:" + str_DataToSign);

基于RSA的數字簽名和驗證C#源碼

            Console.WriteLine("長度:" + str_DataToSign.Length.ToString());

基于RSA的數字簽名和驗證C#源碼

            Console.WriteLine();

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            string str_Private_Key = Convert.ToBase64String( RSAalg.ExportCspBlob(true) );

基于RSA的數字簽名和驗證C#源碼

            string str_Public_Key = Convert.ToBase64String( RSAalg.ExportCspBlob(false) );

基于RSA的數字簽名和驗證C#源碼

            Console.WriteLine("公鑰:" + str_Public_Key);

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            Console.WriteLine("私鑰:" + str_Private_Key);

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            string str_SignedData = HashAndSign(str_DataToSign, str_Private_Key);// Hash and sign the data.

基于RSA的數字簽名和驗證C#源碼

            Console.WriteLine("簽名資料:" + str_SignedData);

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            if (VerifySignedHash(str_DataToSign, str_SignedData, str_Public_Key))

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

                Console.WriteLine("驗證簽名OK.");

基于RSA的數字簽名和驗證C#源碼

            }

基于RSA的數字簽名和驗證C#源碼

            else

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

                Console.WriteLine("簽名不比對!");

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

        }

基于RSA的數字簽名和驗證C#源碼

        catch (ArgumentNullException)

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            Console.WriteLine("The data was not signed or verified");

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

    }

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

    //對資料簽名

基于RSA的數字簽名和驗證C#源碼

    public static string HashAndSign(string str_DataToSign, string str_Private_Key)

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

        ASCIIEncoding ByteConverter = new ASCIIEncoding();

基于RSA的數字簽名和驗證C#源碼

        byte[] DataToSign = ByteConverter.GetBytes(str_DataToSign);

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            RSAalg.ImportCspBlob( Convert.FromBase64String(str_Private_Key) );

基于RSA的數字簽名和驗證C#源碼

            byte[] signedData = RSAalg.SignData(DataToSign, new SHA1CryptoServiceProvider());

基于RSA的數字簽名和驗證C#源碼

            string str_SignedData = Convert.ToBase64String(signedData);

基于RSA的數字簽名和驗證C#源碼

            return str_SignedData;

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

        catch (CryptographicException e)

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            Console.WriteLine(e.Message);

基于RSA的數字簽名和驗證C#源碼

            return null;

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

    //驗證簽名

基于RSA的數字簽名和驗證C#源碼

    public static bool VerifySignedHash(string str_DataToVerify, string str_SignedData, string str_Public_Key)

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

        byte[] SignedData = Convert.FromBase64String(str_SignedData);

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

        byte[] DataToVerify = ByteConverter.GetBytes(str_DataToVerify);

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            RSAalg.ImportCspBlob( Convert.FromBase64String(str_Public_Key) );

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            return RSAalg.VerifyData(DataToVerify, new SHA1CryptoServiceProvider(), SignedData);

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

            return false;

基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼
基于RSA的數字簽名和驗證C#源碼

}

基于RSA的數字簽名和驗證C#源碼

繼續閱讀