Bir dizeyi şifrelemek için OpenSSL kullanmaya çalışıyorum ve daha sonra bu basit dizeyi şifresini çözmek için bir C# uygulamasına geçiriyorum. Sorun, özel anahtarların aynı üretilmemesi nedeniyle paylaşılan özel "düz metin" şifresini kullanamıyorum. Eğer C# anahtarım anahtarını -K hex anahtarı olarak kullanırsam, o zaman şifreyi çözer.OpenSSL simetrik anahtar vs .NET simetrik anahtar - eşleşmiyor
Parola'nın C# CryptDeriveKey
ve OpenSSL PKCS#5 padding
arasındaki anahtarla aynı olmadığına inanıyorum.
Yine, on hex anahtarını OpenSSL-K içinde C# 'dan kullanırsam, doğru şekilde şifreler ve doğru şekilde şifresini çözer.
İnsanların C# içindeki OpenSSL kitaplıklarını kullandığı örnekleri gördüm. .NET System.Security.Cryptography
, OpenSSL ile tamamen uyumlu değil mi? 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);
anahtarı:
C:\OpenSSL-Win32\bin>echo test|openssl enc -des-ede3 -e -nosalt -md sha1 -base64 -pass pass:MyTestKey -iv 0 -p
anahtar = E76B45CFD69213824DC968FCC31E39285BAA8A11DD8395DE
şifrelenmiş B5E67ADF58435DBA0D67CDC49410E6BA2004DA2F97432F76
şifrelenmiş: i + fxaM3/gag =
* "Ben Parola kilit C# CryptDeriveKey ve OpenSSL PKCS # arasındaki aynı dönüştürülmüş olmadığını hissetmek 5 doldurma ... "* - Doğru. Yığın Taşması'nda arama yapmalı veya adam sayfalarına girmeli ve 'pass pass: MyTestKey' ve ['EVP_BytesToKey'] hakkında bilgi almalısınız (https://www.openssl.org/docs/manmaster/crypto/EVP_BytesToKey.html) . 'EVP_BytesToKey',' enc' ve 'dec' gibi OpenSSL yardımcı programlarında yaygın olarak kullanılmaktadır. Diğer kütüphaneler OpenSSL ile inter-oping için bu fonksiyonu tekrarlar. Bakınız, örneğin, Crypto ++ ve [OPENSSL_EVP_BytesToKey] (http://www.cryptopp.com/wiki/OPENSSL_EVP_BytesToKey). – jww
Teşekkürler. Zaten belirttiğiniz gibi OpenSSL nesneleri kullanarak C# uygulamaları gördüm, ama geçerli C# mantığı ile uyumlu olması için OpenSSL tarafında bir çözüm arıyordum. Mümkün değil – kenyu73