鉴于pem格式的键与
类似-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,DE1BB301BDE4BB45
msUEpZKZ0uaOmhGXBPnh2GoNSXyExdeqETd9w71l0G1bk1cCbiV4EOnmR7bcN+OE
(20 lines)
YoIx/E+tFHkt3gQcFhVUNgSOe/5+huXwRwUC5dthPzzZFlDCXHfwfrrBzOSGxZpX
uBs1JxY4qOLRdZVaZlQespForxBTYD6RuHi1UI5lqEW7363VyCLho9QYgGFM0LUi
qbln5WV37PTmayxMfzlGUB2XazwON+WU3obbXuCFXAy96Y6VGzv0lQ==
-----END RSA PRIVATE KEY-----
加密的字符串(使用公钥加密)我尝试用以下代码解密
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.IV = HextoByte("DE1BB301BDE4BB45");
des.Padding = PaddingMode.None;
des.Mode = CipherMode.CBC;
des.Key = Convert.FromBase64String(//Key from above from ms.. to ==);
byte[] encrypted = Convert.FromBase64String("");
byte[] decrypted = des.CreateDecryptor().TransformFinalBlock(encrypt, 0, encrypt.Length);
string decryptedString = Encoding.UTF8.GetString(decrypted)
分配密钥时会导致异常 "指定密钥不是此算法的有效大小"
密钥是使用(也尝试使用192)生成的
openssl genrsa -des3 -out Key.pem 2048
使用
生成公钥openssl rsa -in Key.pem -pubout > Key.pub
有人能帮助我指出我遗失或做错了吗?
谢谢
答案 0 :(得分:0)
答案 1 :(得分:0)
您正在使用带有3DES密码的RSA密钥。这是错误的钥匙。
您的问题中的私钥已使用3DES加密,可能使用基于密码的加密。您需要密钥才能解密私钥,然后才能将其用于任何事情。
恢复RSA私钥后,很可能会使用它来解密对称密钥。通常,每个加密的消息将包括用接收者的公钥加密的对称密码密钥。这就是您使用您恢复的RSA私钥解密的内容。
获得第二个对称密钥后,您可以使用它来解密实际邮件,如您在问题中所示。
在伪代码中:
rsaPvtKey = passwordDecrypt(password, encryptedPrivateKey)
contentKey = rsaDecrypt(rsaPvtKey, encryptedContentKey)
message = tripleDesDecrypt(contentKey, encryptedMessage)
原始问题中的代码非常接近。问题是密钥是从密码派生的,而消息是base-64编码的信息。成功解密这将产生PKCS#8格式的RSA私钥,而.NET应该有一个用于加载它的API。
OpenSSL密钥派生不是标准的(并且它不是很好)。您需要使用MD5哈希算法查找或编写一些代码以使用密码创建DES-EDE3密钥。
d0 = md5(password || iv) /* Hash password and IV */
d1 = md5(d0 || password || iv) /* Hash first hash, password, and IV */
key = subarray(d0 || d1, 0, 24) /* Take the first 24 bytes of d0 + d1 */
JavaScience code包含一个函数GetOpenSSL3deskey
来执行此密钥派生。您可以使用提取的iv
,密码,count
为1,miter
为2来调用它。
执行此操作后,请将其分配给原始代码中的des.Key
。已分配给des.Key
的内容应分配给encrypt
。 (这是DecodeOpenSSLPrivateKey
函数的作用。)完成解密后,字节数组decrypted
将包含PKCS#1的中文剩余定理格式的RSA私钥。应该有一些.NET API来构建一个RSA私钥。 (请参阅DecodeRSAPrivateKey
函数。)
然后可以使用此RSA私钥解密其他消息。