【发布时间】:2016-12-12 04:33:45
【问题描述】:
我正在使用jose-jwt library 并希望使用 RS256 算法在 C# 中创建一个签名的 JWT 进行加密。我没有密码学经验,所以请原谅我的无知。我在文档中看到以下示例:
var payload = new Dictionary<string, object>()
{
{ "sub", "mr.x@contoso.com" },
{ "exp", 1300819380 }
};
var privateKey=new X509Certificate2("my-key.p12", "password", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider;
string token=Jose.JWT.Encode(payload, privateKey, JwsAlgorithm.RS256);
其中显示了 p12 文件的使用,但我如何使用以下形式的 RSA 密钥文件?我正在查看X509Certificate2 的文档,但我看不到 RSA 私钥的选项。它似乎只接受PKCS7,据我所知是公钥。
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp
wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5
1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh
3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2
pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX
GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il
AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF
L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k
X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl
U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ
37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0=
-----END RSA PRIVATE KEY-----
最后,docs中列出的两个选项有什么区别,如何在两者之间进行选择?
-------------- 选项 1 ------------------- --------
RS-* 和 PS-* 系列
CLR:
RS256、RS384、RS512 和 PS256、PS384、PS512 签名需要 RSACryptoServiceProvider(通常是私钥)对应的密钥 长度。 CSP 需要强制使用 Microsoft Enhanced RSA 和 AES 加密提供者。通常可以重新导入 RSA 参数。见http://clrsecurity.codeplex.com/discussions/243156 了解详情。
-------------- 选项 2 ------------------- --------
CORECLR:RS256、RS384、RS512 签名需要相应长度的 RSA(通常是私有)密钥。
【问题讨论】:
-
只是为了检查...您帖子中的密钥...这是测试密钥,对吗?
-
@vcsjones 是的,我不想出示我的真钥匙。
标签: c# encryption rsa jwt sha256