如何解决TLS RSA解密失败,并显示“参数不正确”
添加说明后,我将从这里重新发布。我编辑了旧帖子为时已晚,因此不会进入重新打开的审核队列:Original Post
我编写一个C#嗅探器来解密我已经具有私钥的TLS数据包。这是TLS数据包的屏幕截图。
我曾尝试解密“加密的应用程序数据”中的字节,但出现错误“参数不正确”,这通常意味着数据与提供的密钥不正确,所以问题是,我是解密错误的字节?
我拥有的私钥来自----- BEGIN私钥-----部分中的.pem文件。我认为该.pem文件是从OpenSSL生成的,当我将该.pem文件添加到Wireshark时,Wireshark可以明文形式显示加密的应用程序数据。
这是失败的代码
if (File.Exists(filename))
{
string strPEM = File.ReadAllText(filename);
string strPriKey = GetStringFromPEM(strPEM,PEMStringType.PrivateKey);
strPriKey = RsaPemFormatHelper.Pkcs8PrivateKeyFormatRemove(strPriKey);
byte[] decryptedBytes;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048))
{
RSAParameters rsaPrivParam = CreateRsapFromPrivateKey(Convert.FromBase64String(strPriKey));
rsa.ImportParameters(rsaPrivParam);
// just to test rsa is able to encrypt and decrypt correctly with the private key
string testString = "test123";
var encrypted = rsa.Encrypt(Encoding.UTF8.GetBytes(testString),false);
string encryptedString64 = Convert.ToBase64String(encrypted);
var encrypted2 = Convert.FromBase64String(encryptedString64); // should be the same as encrypted
var decrypted = rsa.Decrypt(encrypted2,false);
string resultString = Encoding.UTF8.GetString(decrypted); // matches testString
// actual decryption
byte[] newArray = new byte[256];
Array.Copy(encryptedBytes,newArray,256); // encryptedBytes contains the bytes in Encrypted Application Data
decryptedBytes = rsa.Decrypt(newArray,false); // <-- fails with 'The parameter is incorrect'
string sbytes = Encoding.UTF8.GetString(decryptedBytes);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。