You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:13:17