.NET(C#):使用AsymmetricSignatureFormatter類和AsymmetricSignatureDeformatter類

來源:互聯網
上載者:User

在前一篇文章:.NET(C#):RSA的SignHash和VerifyHash,我講到使用RSA的SignHash和VerifyHash可以同樣做到SignData和VerifyData,事實上還有一種方法進行公開金鑰加密的簽名認證。就是.NET中的AsymmetricSignatureFormatter和AsymmetricSignatureDeformatter。直接翻譯就是“不對稱式加密簽名格式化器和反格式化器”。分明用來進行建立簽名和驗證簽名的。

 

他們都需要操作一個不對稱式加密類型(即公開金鑰加密類型:.NET中的AsymmetricAlgorithm類型)。為了設定這個類型,需要使用SetKey和SetHashAlgorithm來分別設定公開金鑰加密的密鑰和用來計算簽名的雜湊演算法。其實由於AsymmetricAlgorithm類並沒有像SymmetricAlgorithm那樣有Key屬性。SetKey的執行往往是直接把一個AsymmetricAlgorithm對象賦值到Formatter或者Deformatter內的一個欄位。

 

設定好對應的公開金鑰加密對象和雜湊演算法後,就可以使用CreateSignature或者VerifySignature來建立或者驗證簽名了。

當前.NET Framework(.NET 4)中有針對RSA的RSAPKCS1Signature(Formatter和Deformatter),和針對DSA的DSASignature(Formatter和Deformatter)類型。

 

注意SetHashAlgorithm方法參數不需要是OID形式,而SignHash/VerifyHash方法則需要OID。

看代碼(用RSA做樣本):用用AsymmetricSignatureFormatter類和AsymmetricSignatureDeformatter類和SignHash以及VerifyHash作比較。兩者都輸出同樣的結果。

//+ using using System.Security.Cryptography

 

//建立RSA和SHA1

using (var rsa = new RSACryptoServiceProvider())

using (var sha = SHA1.Create())

{

    //資料雜湊值

    var hash = sha.ComputeHash(new byte[] { 1, 2, 3 });

    //建立SHA1的OID

    var oid = new Oid("SHA1");

 

    //使用SignHash

    var sig1 = rsa.SignHash(hash, oid.FriendlyName);

    //輸出1

    Console.WriteLine(BitConverter.ToString(sig1));

 

    //使用AsymmetricSignatureFormatter(RSAPKCS1SignatureFormatter).CreateSignature

    var fmt = new RSAPKCS1SignatureFormatter();

    fmt.SetKey(rsa);

    fmt.SetHashAlgorithm("SHA1");

    var sig2 = fmt.CreateSignature(hash);

 

    //輸出2

    Console.WriteLine(BitConverter.ToString(sig2));

 

    //使用VerifyHash

    //輸出3

    Console.WriteLine(rsa.VerifyHash(hash, oid.FriendlyName, sig1));

 

 

    //使用AsymmetricSignatureDeformatter(RSAPKCS1SignatureDeformatter).VerifySignature

    var defmt = new RSAPKCS1SignatureDeformatter();

    defmt.SetKey(rsa);

    defmt.SetHashAlgorithm("SHA1");

    //輸出4

    Console.WriteLine(defmt.VerifySignature(hash, sig2));

}

 

輸出:

31-18-4E-93-DF-1D-FF-EC-76-19-AE-68-01-67-36-E5-29-A3-6C-1F-A5-EA-9A-C5-BC-B5-2F

-AF-60-71-16-61-71-5F-60-65-8A-17-C9-D3-A2-CE-EB-A3-FE-58-0F-45-98-07-62-71-18-A

7-AA-8C-3A-EF-B6-B7-D1-D7-5C-EC-2F-A7-C7-5F-61-EC-66-14-9C-05-5C-C9-01-88-28-35-

95-02-BA-DD-96-B6-F3-B5-5B-D4-FD-54-1F-53-64-F7-77-5A-AE-5D-87-64-24-18-43-6E-AD

-9A-EB-35-69-53-67-D8-4F-D5-44-98-89-C4-9B-6F-3F-16-08-65-00-84

 

31-18-4E-93-DF-1D-FF-EC-76-19-AE-68-01-67-36-E5-29-A3-6C-1F-A5-EA-9A-C5-BC-B5-2F

-AF-60-71-16-61-71-5F-60-65-8A-17-C9-D3-A2-CE-EB-A3-FE-58-0F-45-98-07-62-71-18-A

7-AA-8C-3A-EF-B6-B7-D1-D7-5C-EC-2F-A7-C7-5F-61-EC-66-14-9C-05-5C-C9-01-88-28-35-

95-02-BA-DD-96-B6-F3-B5-5B-D4-FD-54-1F-53-64-F7-77-5A-AE-5D-87-64-24-18-43-6E-AD

-9A-EB-35-69-53-67-D8-4F-D5-44-98-89-C4-9B-6F-3F-16-08-65-00-84

 

True

True

結果正確!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.