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

C#中3DES解密:解决TransformFinalBlock参数CS1503转换错误

解决C# 3DES解密中的CS1503错误及TransformFinalBlock参数解析

这个CS1503错误本质是类型不匹配:你把string直接传给了需要char[]类型的参数,再加上代码里还有数组越界的小问题,我一步步给你理清楚:

1. 搞定CS1503错误

这个错误大概率出在你初始化3DES实例的代码里(比如设置Key或IV的时候)——因为DESCryptoServiceProvider的Key和IV属性都是byte[]类型,如果你直接把字符串赋值给它们,就会触发这个转换错误。

正确处理分两种场景:

  • 如果确实需要char数组(比如某些老API):直接用string.ToCharArray()转换
    string input = "your target string";
    char[] charArr = input.ToCharArray();
    
  • 加解密场景更常用的字节数组需求:用编码类把字符串转成字节数组,比如UTF8:
    string keyString = "你的3DES密钥";
    byte[] keyBytes = Encoding.UTF8.GetBytes(keyString);
    // 注意:3DES密钥必须是16或24字节,长度不对的话要做补全/截断处理
    des.Key = keyBytes;
    

2. 正确理解TransformFinalBlock的参数

TransformFinalBlock是加解密的核心方法,三个参数的含义必须搞明白:

  • 第一个参数inputBuffer:要解密的字节数组——这里要注意:加密后的文本通常是Base64编码的(不会直接是UTF8字符串),所以不能直接用Encoding.UTF8.GetBytes(e.Message.Text),得先把Base64字符串转成字节数组!
  • 第二个参数inputOffset:从字节数组的哪个索引开始处理,一般传0表示从开头处理
  • 第三个参数inputCount:要处理的字节总数,一般传inputBuffer.Length表示处理整个数组

3. 修正你的代码片段

结合上面的要点,把你的代码改写成可运行的正确版本(顺便修复数组越界问题):

private static void Bot_OnMessage4(object sender, MessageEventArgs e)
{
    // 假设你已经正确初始化了3DES实例,示例:
    // using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
    // {
    //     des.Key = 你的密钥字节数组;
    //     des.IV = 你的初始化向量字节数组;
    //     des.Mode = CipherMode.CBC; // 加密和解密模式必须完全一致
    //     des.Padding = PaddingMode.PKCS7; // 填充方式也必须完全一致
    //     ...

    using (ICryptoTransform decrypt = des.CreateDecryptor())
    {
        // 第一步:把加密后的Base64字符串转成字节数组(如果你的加密文本不是Base64,再用Encoding.UTF8.GetBytes)
        byte[] encryptedBytes = Convert.FromBase64String(e.Message.Text);
        
        // 第二步:执行解密
        byte[] decryptedBytes = decrypt.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);
        
        // 第三步:把解密后的字节数组转成明文字符串
        string decryptedText = Encoding.UTF8.GetString(decryptedBytes);
        
        // 修复数组越界:数组长度为1时,索引只能是0
        string[] dd = new string[1];
        dd[0] = decryptedText;
        
        // 后续处理逻辑...
    }
    // }
}

额外提醒

  • 加密和解密的**模式(ECB/CBC)、填充方式(PKCS7/Zeros)**必须完全一致,否则解密会失败
  • 3DES的密钥长度必须是16或24字节,如果你的密钥字符串转成字节后长度不对,要做补全或截断处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:59:01