如何在.net中解码私钥的BASE64,PCKS-8表示?

时间:2016-05-30 17:32:05

标签: .net authentication encryption

我正在努力将我的应用程序与沃尔玛市场API集成。他们的文档几乎说如果你不使用Java就是你自己。我的应用程序使用VB.Net,但我愿意用任何.net语言实现它。

根据他们的指示:

  

通过以下方式对此数据的字节数组表示进行签名:

     

解码Base 64,私钥的PKCS-8表示。注意   密钥是使用PKCS-8编码的。各种语言的图书馆   提供指定密钥是否采用此格式而不是密钥的功能   其他冲突的格式,如PKCS-1。使用此字节表示   您使用SHA-256使用RSA签名数据的密钥。编码   使用Base 64生成签名。

此时我陷入了第一部分。我无法弄清楚如何解码.net中的私钥。一旦我搞清楚了,我将进入签署请求的第二部分。

我的问题是,是否有任何代码片段或库可以帮助我解决这个问题。一些使用任何库的示例代码也将受到赞赏。

1 个答案:

答案 0 :(得分:-1)

它适用于我使用c#.net 4.6

using System;
using System.Security.Cryptography;
public static string SignData(string stringToBeSigned, string encodedPrivateKey)
        {
            string signedData = string.Empty;
            try
            {
                var decodeKey = Convert.FromBase64String(privateEncodedStr);
                var key = CngKey.Import(decodeKey, CngKeyBlobFormat.Pkcs8PrivateBlob);
                var alg = new RSACng(key);
                byte[] data = Encoding.UTF8.GetBytes(stringToBeSigned);
                byte[] signData = alg.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
                signedData = Convert.ToBase64String(signData);
            }
            catch (Exception)
            {
                throw;
            }
            return signedData;
        }