我正在使用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