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

.NET Framework下加密文本文件可通过Linux命令行解密的方案咨询

推荐方案1:兼容OpenSSL的AES-256-CBC对称加密

该方案无需引入第三方依赖,.NET Framework原生支持,加密产物可直接通过Linux默认预装的openssl命令解密,仅需统一密码短语即可完成加解密全流程。

.NET Framework 加密实现

直接使用System.Security.Cryptography命名空间下的类实现,密钥派生逻辑需与OpenSSL的PBKDF2规则对齐,保证跨平台加解密互通,示例核心代码:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

public static class AesOpenSslEncryptor
{
    // 迭代次数可按需调整,建议不低于10000
    private const int Iterations = 10000;
    private const int KeySize = 256;
    private const int BlockSize = 128;

    public static void EncryptFile(string inputFilePath, string outputFilePath, string passphrase)
    {
        // 生成随机盐值
        byte[] salt = new byte[8];
        using (var rng = RandomNumberGenerator.Create())
        {
            rng.GetBytes(salt);
        }

        // 派生密钥和IV
        using (var pbkdf2 = new Rfc2898DeriveBytes(passphrase, salt, Iterations, HashAlgorithmName.SHA256))
        {
            byte[] key = pbkdf2.GetBytes(KeySize / 8);
            byte[] iv = pbkdf2.GetBytes(BlockSize / 8);

            using (var aes = Aes.Create())
            {
                aes.Key = key;
                aes.IV = iv;
                aes.Mode = CipherMode.CBC;
                aes.Padding = PaddingMode.PKCS7;

                // 写入OpenSSL兼容的文件头:Salted__ + 盐值
                using (var outputFs = File.OpenWrite(outputFilePath))
                {
                    outputFs.Write(Encoding.ASCII.GetBytes("Salted__"), 0, 8);
                    outputFs.Write(salt, 0, 8);

                    using (var encryptor = aes.CreateEncryptor())
                    using (var cryptoStream = new CryptoStream(outputFs, encryptor, CryptoStreamMode.Write))
                    using (var inputFs = File.OpenRead(inputFilePath))
                    {
                        inputFs.CopyTo(cryptoStream);
                    }
                }
            }
        }
    }
}

Linux端解密命令

直接执行以下命令即可完成解密,无需额外安装工具:
openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -md sha256 -in 加密文件路径 -out 解密后文件路径 -pass pass:你的密码短语


推荐方案2:GPG对称加密

如果偏好PGP格式的加密产物,可使用该方案,无需生成公私钥对,仅用密码短语即可完成加解密,刚好避开你之前遇到的PGP工具强制依赖公私钥的问题:

  • .NET端可通过BouncyCastle加密库实现GPG对称加密逻辑,无需依赖公私钥配置
  • Linux端解密命令:
    gpg -d --batch --passphrase 你的密码短语 -o 解密后文件路径 加密文件路径

注意事项
  • 密码短语建议长度不低于12位,混合大小写字母、数字和特殊字符,降低暴力破解风险
  • 文本文件加解密前后需统一使用UTF-8编码,避免跨平台出现乱码
  • 生产环境使用时禁止将密码短语硬编码在代码或配置文件中,建议通过安全的密钥管理服务存储

内容的提问来源于stack exchange,提问作者breizh punisher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:48:03