.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
相关产品推荐
相关产品推荐

