我正在寻找创建一个使用与OpenSSL兼容的.NET库的类.我知道有一个OpenSSL.Net包装器,但我宁愿避免引用第三方\非托管代码.我不是在寻找关于这是否是正确选择的讨论,但有理由.
目前我有以下内容,我认为应该与OpenSSL兼容 - 它有效地做了我认为OpenSSL从OpenSSL文档中所做的事情.但是,即使只使用这个类来进行加密和解密,我也会收到以下错误:
[CryptographicException] Padding is invalid and cannot be removed.
Run Code Online (Sandbox Code Playgroud)
我已经逐步完成了代码并验证了salt\key\iv在加密和解密过程中都是一样的.
请参阅下面的示例类和调用加密解密.欢迎任何想法或指示.
public class Protection
{
public string OpenSSLEncrypt(string plainText, string passphrase)
{
// generate salt
byte[] key, iv;
byte[] salt = new byte[8];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetNonZeroBytes(salt);
DeriveKeyAndIV(passphrase, salt, out key, out iv);
// encrypt bytes
byte[] encryptedBytes = EncryptStringToBytesAes(plainText, key, iv);
// add salt as first 8 bytes
byte[] encryptedBytesWithSalt = new byte[salt.Length + encryptedBytes.Length];
Buffer.BlockCopy(salt, 0, encryptedBytesWithSalt, 0, salt.Length);
Buffer.BlockCopy(encryptedBytes, 0, encryptedBytesWithSalt, salt.Length, …Run Code Online (Sandbox Code Playgroud)