企业微信会话存档解密 rsa密钥前后不一致
QY-WindRises opened this issue · 2 comments
QY-WindRises commented
关于问题的简单描述
添加密钥时开头-----BEGIN RSA PRIVATE KEY-----包含 RSA 解密时判断中开头不包含RSA
与问题相关的源代码
文档:
manager.AddEntry(new EncryptionKeyEntry(1, "-----BEGIN RSA PRIVATE KEY----- 消息加解密私钥 PKCS#1 PEM 内容 -----END RSA PRIVATE KEY-----"));
解密方法
byte[] privateKeyBytes = ConvertPrivateKeyPemToByteArray(privateKeyPem);
private static byte[] ConvertPrivateKeyPemToByteArray(string privateKeyPem)
{
if (!privateKeyPem.StartsWith("-----BEGIN PRIVATE KEY-----"))
using TextReader reader = new StringReader(privateKeyPem);
using PemReader pemReader = new PemReader(reader);
object obj = pemReader.ReadObject();
...
}
异常堆栈或异常原因
运行到object obj = pemReader.ReadObject();这行时报错
Org.BouncyCastle.OpenSsl.PemException:“malformed sequence in RSA private key”
发生问题的运行环境
请在此填写以下几项内容:
- 操作系统:Windows 10
- .NET 版本:.NET Framework4.8.0
- 使用的模块及版本:SKIT.FlurlHttpClient.Wechat.Work 3.1.0
补充说明
fudiwei commented
这里的判断是为了同时兼容 PKCS#1 和 PKCS#8 两种格式。
抛这个异常大概率是你把两种格式混在一起了,你有 PKCS#1 格式的 PEM 你就传 PKCS#1 格式的私钥,你有 PKCS#8 格式的 PEM 那就传 PKCS#8 格式的私钥。但不能拿着 PKCS#8 格式的 PEM,自己把开头的 BEGIN PUBLIC KEY
改成 BEGIN RSA PUBLIC KEY
。
QY-WindRises commented
这里的判断是为了同时兼容 PKCS#1 和 PKCS#8 两种格式。
抛这个异常大概率是你把两种格式混在一起了,你有 PKCS#1 格式的 PEM 你就传 PKCS#1 格式的私钥,你有 PKCS#8 格式的 PEM 那就传 PKCS#8 格式的私钥。但不能拿着 PKCS#8 格式的 PEM,自己把开头的
BEGIN PUBLIC KEY
改成BEGIN RSA PUBLIC KEY
。
感谢解答。可能是这样,生成密钥时稀里糊涂的就操作了,没有看密钥格式。