我正在使用jose-jwt library并希望在C#中使用RS256算法创建加密的JWT以进行加密。我没有密码学经验,所以请原谅我的无知。我看到在文档下面的例子:如何使用RS256和RSA私钥在C#中创建加密的JWT
var payload = new Dictionary<string, object>()
{
{ "sub", "[email protected]" },
{ "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增强型RSA和AES密码提供程序。通常可以做的是重新导入 RSAParameters。有关详细信息,请参见http://clrsecurity.codeplex.com/discussions/243156 。
--------------------------选项2 ------------------ --------
CORECLR:RS256,RS384,RS512签名需要相应长度的RSA(通常为私钥)。
只是为了检查...你的帖子中的关键......这是一个测试的关键,对吧? – vcsjones
@vcsjones是的,我不想展示我真正的钥匙。 – FullStack