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