程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#實現MD5WITHRSA簽名,

C#實現MD5WITHRSA簽名,

編輯:C#入門知識

C#實現MD5WITHRSA簽名,


這是很久以前的寫的一篇博客了,今天把他重新找出來整理一下發布到博客園

當時對接銀聯的時候搞了很久都沒搞出來,後來一個偶然的機會發現類似的一個代碼參考了一下終於弄好了

這段代碼主要是實現了C#服務端對接手機銀聯的java端的接口的簽名

希望可以幫到大家

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Security.Cryptography.X509Certificates;
 6 using System.Security.Cryptography;
 7 
 8 namespace MD5WithRSATest
 9 {
10     public class MD5WithRSA
11     {
12         private static char[] bcdLookup = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
13 
14         /// <summary>
15         /// 返回MD5WithRSA的簽名字符串
16         /// </summary>
17         /// <param name="fileName">pfx證書文件的路徑</param>
18         /// <param name="password">pfx證書密碼</param>
19         /// <param name="strdata">待簽名字符串</param>
20         /// <param name="encoding">字符集,默認為ISO-8859-1</param>
21         /// <returns>返回MD5WithRSA的簽名字符串</returns>
22         public static string SignData(string fileName, string password, string strdata, string encoding = "ISO-8859-1")
23         {
24             X509Certificate2 objx5092;
25             if (string.IsNullOrWhiteSpace(password))
26             {
27                 objx5092 = new X509Certificate2(fileName);
28             }else
29             {
30                 objx5092 = new X509Certificate2(fileName, password);
31             }
32             RSACryptoServiceProvider rsa = objx5092.PrivateKey as RSACryptoServiceProvider;
33             byte[] data = Encoding.GetEncoding(encoding).GetBytes(strdata);
34             byte[] hashvalue = rsa.SignData(data, "MD5");//為證書采用MD5withRSA 簽名
35             return bytesToHexStr(hashvalue);///將簽名結果轉化為16進制字符串
36         }
37         /// <summary>
38         /// 將簽名結果轉化為16進制字符串
39         /// </summary>
40         /// <param name="bcd">簽名結果的byte數字</param>
41         /// <returns>16進制字符串</returns>
42         private static string bytesToHexStr(byte[] bcd)
43         {
44             StringBuilder s = new StringBuilder(bcd.Length * 2);
45             for (int i = 0; i < bcd.Length; i++)
46             {
47                 s.Append(bcdLookup[(bcd[i] >> 4) & 0x0f]);
48                 s.Append(bcdLookup[bcd[i] & 0x0f]);
49             }
50             return s.ToString();
51         }
52     }
53 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved