OpenSSL对称密钥与.NET对称密钥不匹配



我正在尝试使用OpenSSL加密字符串,然后将该简单字符串传递给C#应用程序进行解密。问题是我无法使用共享的专用"明文"密码,因为私钥的生成方式不同。如果我使用c#生成的密钥作为-K十六进制密钥,那么它可以很好地解密。

我觉得密码没有像c#CryptDeriveKey和OpenSSL PKCS#5 padding那样转换为密钥。

同样,如果我在OpenSSL-K中使用c#over的十六进制密钥,它会正确加密和解密。

我看到过一些例子,人们在C#中使用OpenSSL库。.NET System.Security.Cryptography是否与OpenSSL不完全兼容?

C:OpenSSL-Win32bin>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);

密钥:B5E67ADF58435DBA0D67DC49410E6BA2004DA2F97432F76
加密:i+fxaM3/KAg=

opensslpass上没有使用花哨的密钥派生函数,它只是计算输入的SHA1哈希。

要在C#中执行等效操作,请使用SHA1 CSP通过密钥ComputeHash()

SHA1CryptoServiceProvider SHA1 = new SHA1CryptoServiceProvider();
tdes.Key = SHA1.ComputeHash(System.Text.Encoding.ASCII.GetBytes("MyTestKey"));

最新更新