C# OpenSSL对称密钥与.NET对称密钥-不匹配

C# OpenSSL对称密钥与.NET对称密钥-不匹配,c#,.net,encryption,openssl,cryptography,C#,.net,Encryption,Openssl,Cryptography,我试图使用OpenSSL加密一个字符串,然后将该简单字符串传递给C#应用程序进行解密。问题是我不能使用共享的私有“明文”密码,因为生成的私钥不同。如果我使用我的c#生成的密钥作为-K十六进制密钥,那么它可以很好地解密 我觉得密码在c#cryptedrievekey和OpenSSLPKCS#5 padding之间转换成的密钥并不相同 同样,如果我在OpenSSL-K中使用c#over中的十六进制密钥,它将正确加密和解密 我看到过人们在C#中使用OpenSSL库的例子。.NETSystem.Secu

我试图使用OpenSSL加密一个字符串,然后将该简单字符串传递给C#应用程序进行解密。问题是我不能使用共享的私有“明文”密码,因为生成的私钥不同。如果我使用我的c#生成的密钥作为-K十六进制密钥,那么它可以很好地解密

我觉得密码在c#
cryptedrievekey
和OpenSSL
PKCS#5 padding
之间转换成的密钥并不相同

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

我看到过人们在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=

键:b5e67adf5843dba0d67cdc49410e6ba2004da2f97432f76
加密:i+fxaM3/KAg=


openssl
没有在
pass
上使用奇特的密钥派生函数,它只是计算输入的SHA1散列

要在C#中执行等效操作,请使用SHA1 CSP覆盖密钥:

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

所以我假设没有办法让OpenSSL计算与我当前的c#实现相同的十六进制数?我必须使用现有的c#代码,因此我针对OpenSSL用户的唯一解决方法是生成十六进制密钥,并让他们使用-K,而不是使用-K的明文密码短语。“我觉得密码在c#CryptoderiveKey和OpenSSL PKCS#5填充之间不会转换为相同的密钥…”正确。您需要搜索堆栈溢出,或者进入手册页,阅读关于
-pass:MyTestKey
和的内容
EVP_BytesToKey
广泛用于OpenSSL实用程序,如
enc
dec
。其他库甚至复制了该函数,以便与OpenSSL交互。例如,请参阅Crypto++和。谢谢。我已经看到了使用OpenSSL对象的c#实现,正如您所指出的,但我一直在寻找OpenSSL方面的解决方案,以与我当前的c#逻辑兼容。似乎不可能
SHA1CryptoServiceProvider SHA1 = new SHA1CryptoServiceProvider();
tdes.Key = SHA1.ComputeHash(System.Text.Encoding.ASCII.GetBytes("MyTestKey"));