我对以下问题的结果采取了一些自由:
并创建了以下类文件......
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace T1.CoreUtils.Utilities
{
public static class CryptoUtility
{
public static string Encrypt(string input, string passphrase = null)
{
byte[] key, iv;
DeriveKeyAndIV(Encoding.ASCII.GetBytes(passphrase), null, 1, out key, out iv);
return Convert.ToBase64String(EncryptStringToBytes(input, key, iv));
}
public static string Decrypt(string inputBase64, string passphrase = null)
{
byte[] key, iv;
DeriveKeyAndIV(Encoding.ASCII.GetBytes(passphrase), null, 1, out key, out iv);
return DecryptStringFromBytes(Convert.FromBase64String(inputBase64), key, iv);
} …Run Code Online (Sandbox Code Playgroud) 我正在寻找OpenSSL EVP_BytesToKey函数的直接.NET实现.我发现的最接近的是System.Security.Cryptography.PasswordDeriveBytes类(和Rfc2898DeriveBytes),但它似乎略有不同,并且不生成与EVP_BytesToKey 相同的密钥和iv.
我也发现这个实现似乎是一个好的开始,但没有考虑迭代计数.
我意识到有OpenSSL.NET,但它只是本机openssl DLL的包装,而不是"真正的".NET实现.