我正在尝试使用OpenSSL加密字符串,然后将该简单字符串传递给C#应用程序以对其进行解密。问题是我不能使用共享的私人“明文”密码,因为私人密钥生成的密码不一样。如果我将c#生成的密钥用作-K十六进制密钥,则解密就可以了。
我觉得密码没有转换为c#CryptDeriveKey
和OpenSSL之间的相同密钥PKCS#5 padding
。
同样,如果我在OpenSSL -K中使用c#中的十六进制密钥,则它将正确加密和正确解密。
我已经看到了人们在C#中使用OpenSSL库的示例。.NET是否System.Security.Cryptography
不完全与OpenSSL兼容?
C:\OpenSSL-Win32\bin>echo test|openssl enc -des-ede3 -e -nosalt -md
sha1 -base64 -pass pass:MyTestKey -iv 0 -p
密钥= E76B45CFD69213824DC968FCC31E39285BAA8A11DD8395DE
加密:3IFZ8w6kLa0 =
// ** code simplified so its compacted (wont build)...
var tdes = new TripleDESCryptoServiceProvider();
tdes.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };
tdes.Mode = "ECB";
tdes.Padding = "PKCS7";
var pdb = new PasswordDeriveBytes("MyTestKey", null);
tdes.Key = pdb.CryptDeriveKey("TripleDES", "SHA1", 192, 0);
密钥:B5E67ADF58435DBA0D67CDC49410E6BA2004DA2F97432F76
加密:i + fxaM3 / KAg =
openssl
不会在上使用奇特的密钥派生函数pass
,它只是计算输入的SHA1哈希值。
要在C#中执行等效操作,请使用SHA1 CSPComputeHash()
覆盖键:
SHA1CryptoServiceProvider SHA1 = new SHA1CryptoServiceProvider();
tdes.Key = SHA1.ComputeHash(System.Text.Encoding.ASCII.GetBytes("MyTestKey"));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句