C#中存储账号密码的轻量对称加密方案问询
C# 基于主密码的字符串简易加解密方案
针对你的本地自动登录场景,以下两种方案无需大量代码,适配隐匿式安全需求:
1. .NET 原生无依赖实现(AES对称加密)
直接用.NET内置的System.Security.Cryptography命名空间,仅需少量代码封装,不需要额外引入库:
using System.Security.Cryptography; using System.Text; public static class SimpleCrypto { // 基于主密码生成密钥和IV(固定盐值,适配隐匿式安全场景) private static void DeriveKeyAndIV(string password, out byte[] key, out byte[] iv) { var salt = Encoding.UTF8.GetBytes("your-fixed-salt-here"); // 可自定义固定盐值 using var deriveBytes = new Rfc2898DeriveBytes(password, salt, 10000, HashAlgorithmName.SHA256); key = deriveBytes.GetBytes(32); // AES-256密钥 iv = deriveBytes.GetBytes(16); // AES标准IV长度 } // 加密字符串 public static string Encrypt(string plainText, string password) { DeriveKeyAndIV(password, out var key, out var iv); using var aes = Aes.Create(); aes.Key = key; aes.IV = iv; var encryptor = aes.CreateEncryptor(aes.Key, aes.IV); using var ms = new MemoryStream(); using var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write); using var sw = new StreamWriter(cs); sw.Write(plainText); sw.Close(); return Convert.ToBase64String(ms.ToArray()); } // 解密字符串 public static string Decrypt(string cipherText, string password) { DeriveKeyAndIV(password, out var key, out var iv); using var aes = Aes.Create(); aes.Key = key; aes.IV = iv; var decryptor = aes.CreateDecryptor(aes.Key, aes.IV); using var ms = new MemoryStream(Convert.FromBase64String(cipherText)); using var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read); using var sr = new StreamReader(cs); return sr.ReadToEnd(); } }
使用方式非常简单:
// 加密存储的用户名/密码 var encryptedPwd = SimpleCrypto.Encrypt("user-password", "your-master-password"); // 解密读取 var decryptedPwd = SimpleCrypto.Decrypt(encryptedPwd, "your-master-password");
注意:固定盐值可以硬编码在程序中,符合你“隐匿式安全”的需求;如果需要更灵活,也可以将盐值和加密内容一起存储
2. 轻量NuGet库:SimpleEncrypt
如果不想自己写封装,可以直接安装SimpleEncrypt库,它专门做简易字符串加解密,基于主密码的对称加密,调用代码极少:
安装命令:
Install-Package SimpleEncrypt
使用示例:
using SimpleEncrypt; // 加密 var encrypted = EncryptionService.Encrypt("user-password", "your-master-password"); // 解密 var decrypted = EncryptionService.Decrypt(encrypted, "your-master-password");
这个库已经封装好密钥派生、AES加密等逻辑,完全无需自己处理底层细节。
内容的提问来源于stack exchange,提问作者Dee J. Doena
相关产品推荐
相关产品推荐

