【问题标题】:How do I decode a BASE64, PCKS-8 representation of a private key in .net?如何解码 .net 中私钥的 BASE64、PCKS-8 表示?
【发布时间】:2016-09-28 14:25:32
【问题描述】:
我正在努力将我的应用程序与 Walmart Marketplace API 集成。他们的文档几乎说,如果您不使用 Java,那么您就只能靠自己了。我的应用程序使用 VB.Net,但我愿意用任何 .net 语言实现它。
根据他们的指示:
通过以下方式对该数据的字节数组表示进行签名:
解码您的私钥的 Base 64、PKCS-8 表示。笔记
密钥是使用 PKCS-8 编码的。各种语言的图书馆
提供指定密钥采用这种格式而不是采用这种格式的能力
其他有冲突的格式,例如 PKCS-1。使用此字节表示
使用带有 RSA 的 SHA-256 对数据进行签名。编码
使用 Base 64 生成的签名。
在这一点上,我被困在第一部分。我无法弄清楚如何在.net 中解码私钥。弄清楚这一点后,我将进入签署请求的第二部分。
我的问题是是否有任何代码 sn-p 或库可以帮助我解决这个问题。一些使用任何库的示例代码也将不胜感激。
【问题讨论】:
标签:
.net
authentication
encryption
【解决方案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;
}