[JavaScript] 纯文本查看 复制代码
public static string Decrypt(string cipherText, string password)
{
if (string.IsNullOrEmpty(cipherText) || !IsBase64String(cipherText))
{
return "null";
}
try
{
byte[] fullCipher = Convert.FromBase64String(cipherText);
using (Aes aes = Aes.Create())
{
aes.KeySize = 256;
aes.BlockSize = 128;
// 提取 IV(前 16 字节)
byte[] iv = new byte[16];
Array.Copy(fullCipher, 0, iv, 0, iv.Length);
// 生成密钥
using (var key = new Rfc2898DeriveBytes(password, iv, 10000))
{
aes.Key = key.GetBytes(32); // 256-bit key
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (var decryptor = aes.CreateDecryptor(aes.Key, aes.IV))
using (var ms = new MemoryStream(fullCipher, iv.Length, fullCipher.Length - iv.Length))
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
using (var reader = new StreamReader(cs))
{
return reader.ReadToEnd();
}
}
}
}
catch (Exception ex)
{
if (MainForm.trizhi != null)
{
MainForm.trizhi.Text += $"\n解密失败: {ex.Message}\n";
}
else
{
MessageBox.Show($"解密失败: {ex.Message}", "错误", 0, MessageBoxIcon.Error);
}
return "null";
}
}
[JavaScript] 纯文本查看 复制代码
public static string Encrypt(string plainText, string password)
{
try
{
using (Aes aes = Aes.Create())
{
aes.KeySize = 256;
aes.BlockSize = 128;
aes.GenerateIV(); // 随机 IV
using (var key = new Rfc2898DeriveBytes(password, aes.IV, 10000))
{
aes.Key = key.GetBytes(32); // 256-bit key
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
using (var ms = new MemoryStream())
{
ms.Write(aes.IV, 0, aes.IV.Length); // 写入 IV
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
using (var writer = new StreamWriter(cs))
{
writer.Write(plainText);
}
return Convert.ToBase64String(ms.ToArray());
}
}
}
}
catch (Exception ex)
{
if (MainForm.trizhi != null)
{
MainForm.trizhi.Text += $"\n加密失败: {ex.Message}\n";
}
else
{
MessageBox.Show($"加密失败: {ex.Message}", "错误", 0, MessageBoxIcon.Error);
}
return "null";
}
}