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

C#中使用System.Security.Cryptography加密功能失效问题求助

C#中使用System.Security.Cryptography加密功能失效问题求助

我最近在尝试用密钥、十六进制值和文本体解密一个JSON请求,但找到的代码都是2013-2017年的,试了下面这段代码,好像不管用,想求助怎么解决这个问题:

namespace AES {    
    using System.IO;    
    using System;    
    using System.Security.Cryptography;     

    class Program {         
        public static byte[] FromBase64Url(string base64Url) {            
            // Replace '-' with '+' and '_' with '/' for standard Base64            
            string base64 = base64Url.Replace('-', '+');
            // 代码片段未完成
        }
    }
}

嗨,我来帮你捋捋可能的问题和解决方向:

  • 加密参数必须完全对齐:解密的核心是和加密端的参数100%匹配,包括AES模式(比如CBC、GCM)、填充方式(PKCS7、None)、IV向量、密钥长度(128/256位)。老代码可能用的是过时的默认参数(比如早期有些代码默认ECB模式,现在很少用了),如果和当前加密端的参数不匹配,肯定解不出来。

  • 补全Base64Url的完整转换:你这段代码只处理了-转+,但标准的Base64Url还要把_转/,并且补全末尾的=填充符(Base64Url经常会省略这些填充)。完整的转换逻辑应该是这样的:

    string base64 = base64Url.Replace('-', '+').Replace('_', '/');
    // 补全缺失的填充位
    switch (base64.Length % 4)
    {
        case 2: base64 += "=="; break;
        case 3: base64 += "="; break;
    }
    return Convert.FromBase64String(base64);
    
  • 适配.NET新版本的API:如果你的项目用的是.NET Core/.NET 5+,老代码里的AesManaged这类类已经被标记为过时,建议用Aes.Create()来创建实例,它会自动适配当前平台的最优实现,兼容性更好。举个简单的解密示例:

    using (Aes aes = Aes.Create())
    {
        aes.Key = 你的密钥字节数组; // 注意密钥长度要符合AES要求(16/24/32字节对应128/192/256位)
        aes.IV = 你的IV向量字节数组; // IV长度必须和块大小一致(AES是16字节)
        aes.Mode = CipherMode.CBC; // 和加密端保持一致
        aes.Padding = PaddingMode.PKCS7; // 和加密端保持一致
    
        // 创建解密器并处理数据
        ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
        // 这里可以把文本体的字节数组通过CryptoStream解密,再转成字符串
        using (MemoryStream msDecrypt = new MemoryStream(你的文本体字节数组))
        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
        {
            string decryptedText = srDecrypt.ReadToEnd();
            // 这里就是解密后的内容了
        }
    }
    
  • 注意文本编码问题:解密后的字节数组转字符串时,一定要用和加密端相同的编码(比如UTF-8),别用错编码导致乱码,误以为解密失败。

如果能补充下加密端的具体配置(比如用的什么AES模式、IV是怎么生成的、密钥是否经过了哈希或其他处理),定位问题会更准确哦~

备注:内容来源于stack exchange,提问作者Ndifreke James Okpo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:08:20