【发布时间】:2021-08-20 07:37:41
【问题描述】:
我正在尝试根据公钥验证签名,并且我使用 RSACryptoproviders 等进行了验证。 我设置了公钥(以 PEM 格式导入密钥,读取 rsa 参数,然后创建一个 RsaSecurityKey) 一切正常,但现在客户希望我不仅支持 PEM 格式,还支持 de JWK 格式。
当我用谷歌搜索时,我发现有 100 个网站将 PEM 转换为 JWK(甚至还有一个 JwkConvert 类),但它只是一种方式。
在 c# 中我可以如何反其道而行之?所以我可以将 JWK 转换为 RsaSecurityKey?
我发现了这个帖子: How to transform a jwk to public key over openssl 但我希望我不必自己写所有的东西..
另外,我已经在使用 BouncyCastle 加密库(我用它来导入 PEM 格式)
我希望我可以从 JWK 中检索 RsaParameters,但我只是一个加密用户,这些字母并没有告诉我任何信息。
提供更多信息,这是我的 JWK:
{"keys":[{"kid":"OEbwVQck6qGhsCWiYenQowD9wHic7BtS-LALJEna-og","kty":"RSA","alg":"RS256","use":"sig","n":"w1Y2AZWK8k0gWPQv5Q_GnNHna8kD_TcZhB0_qM8cQ8ABJUiynLjS52tVLeo9NQnIBiiGDDby_bmAkJnxUtzanpGo4wnsvckjHFiThZSNnMpU_GIRFvhjyfPcnvzLhuvmd_gX9iDQmpJk2nbBoatkKwnaiAl0VQ8jP85DxQYsjlxwrKhhVqIe4EYEazq3zTpKOKWu4QSQYE74lvWbyqEmSPG32V2Te7L7BDVAgqsQhAqx0mRpMHcJPtgX0AsM5iQrxUow51Y22shd6pgLkgvbc8LfXKWHAUgeg20JBBQc_gReek1h0qToDY-hWdxLpGBOLeWUKoUVAzAj2gXgTER2TQ","e":"AQAB","x5c":["MIIClTCCAX0CBgFz4hEUBTANBgkqhkiG9w0BAQsFADAOMQwwCgYDVQQDDANJUkQwHhcNMjAwODEyMDk0NTM2WhcNMzAwODEyMDk0NzE2WjAOMQwwCgYDVQQDDANJUkQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDVjYBlYryTSBY9C/lD8ac0edryQP9NxmEHT+ozxxDwAElSLKcuNLna1Ut6j01CcgGKIYMNvL9uYCQmfFS3NqekajjCey9ySMcWJOFlI2cylT8YhEW+GPJ89ye/MuG6+Z3+Bf2INCakmTadsGhq2QrCdqICXRVDyM/zkPFBiyOXHCsqGFWoh7gRgRrOrfNOko4pa7hBJBgTviW9ZvKoSZI8bfZXZN7svsENUCCqxCECrHSZGkwdwk+2BfQCwzmJCvFSjDnVjbayF3qmAuSC9tzwt9cpYcBSB6DbQkEFBz+BF56TWHSpOgNj6FZ3EukYE4t5ZQqhRUDMCPaBeBMRHZNAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHrHDQWMgXLiumpq3JAKDjH+8bf6VRvG40xNRz6H0Xg3pdC+ME8Jqtl49z2oXLJPCDKqyX2Lv9YRn0tFP6VYkBLQp1BBg7j2y8frkMrhzoRt28dhMfyMtdFgOhykwaPl6V0ASmd/iMyjK52XYjyUj+kVFhBNe1dA9F5Ftw1tyfwY5EFWbLyoBLzH+oZxbZzWIdFdSE9hhxOsioIaOOfrpBkincvQOYf/0RJS9jrVM2bRNah0HmxrdkiZNwvszm2uHPVNzgNxiK1iNqTHztbNKm9uO7diziJ4I4f2fesSMEdZG8AZ52NwP1ZVcTE+ZXcOE/+NhyAVf+4SP4abpqzi8+Q="],"x5t":"oNVqosVxKIQ8TW3MGZzM8_2AIJQ","x5t#S256":"_VULg4UAhXE8V7vJFJDTUYeoH0FL2pbbK0Lc8-3CK3k"}]}
当我从中创建 Microsoft JsonWebKey 对象时,“N”和“E”参数为空(“D”、“DP”、“DQ”、“P”、“Q”、“ QI'、'X' 和 'Y')
因此我无法创建 RsaParameters...
【问题讨论】:
-
c# 和 JWK 中的键值不同。填充模式不同。您可以添加填充,但不能删除。在一种情况下,您的密钥可能是 208 字节,另一种情况下可能是 256 字节。不同之处在于 256 字节的末尾有随机字节,这些字节被忽略,除非有一个哈希来验证密钥。因此,您必须更改加密和解密中的加密选项以获取短密钥或长密钥。
-
@jdweng 你失去了我。我了解填充和东西,但是这是从哪里来的?目前我处于默认 JsonWebKey 类似乎无法解析我的(有效)jwks 的阶段......我应该尝试自己解析它并提取参数吗?
标签: c# cryptography rsa jwk