【问题标题】: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 或库可以帮助我解决这个问题。一些使用任何库的示例代码也将不胜感激。

【问题讨论】:

  • NuGet.org 上的充气城堡。

标签: .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;
        }

【讨论】:

  • 不编译,RSACng 的构造函数无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多