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

C# SymmetricAlgorithm显式调用访问器报错,求字节解密方案

解决CS0571错误并完成字节数组解密

错误原因

CS0571是因为你显式调用了属性的get/set底层方法(比如set_KeySize、get_KeySize),C#中属性应直接用赋值/取值语法,不能手动调用这些访问器方法。

修正后的完整代码

private static readonly byte[] saltBytes = new byte[16]
{
    255, 64, 191, 111, 23, 3, 113, 119,
    231, 121, 252, 112, 79, 32, 114, 156
};

private static readonly byte[] cryptKey = new byte[38]
{
    104, 116, 116, 112, 115, 58, 47, 47, 103, 105, 116, 104, 117, 98, 46, 99,
    111, 109, 47, 76, 105, 109, 101, 114, 66, 111, 121, 47, 83, 116, 111, 114,
    109, 75, 105, 116, 116, 121
};

public static string test = Decrypt(new byte[32]
{
    169, 182, 79, 179, 252, 54, 138, 148, 167, 99, 216, 216, 199, 219, 10, 249,
    131, 166, 170, 145, 237, 248, 142, 78, 196, 137, 101, 62, 142, 107, 245, 134
});

public static string Decrypt(byte[] bytesToBeDecrypted)
{
    using (MemoryStream memoryStream = new MemoryStream())
    using (RijndaelManaged rijndael = new RijndaelManaged())
    {
        // 直接设置属性,替换显式的set_XXX调用
        rijndael.KeySize = 256;
        rijndael.BlockSize = 128;
        rijndael.Mode = CipherMode.CBC; // 替换硬编码的1,提高可读性

        Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(cryptKey, saltBytes, 1000);
        // 直接使用属性取值,替换get_XXX调用
        rijndael.Key = deriveBytes.GetBytes(rijndael.KeySize / 8);
        rijndael.IV = deriveBytes.GetBytes(rijndael.BlockSize / 8);

        using (CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write))
        {
            cryptoStream.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
            cryptoStream.FlushFinalBlock(); // 必须调用,确保解密完成所有数据
        }

        return Encoding.UTF8.GetString(memoryStream.ToArray());
    }
}

关键修改点

  • 所有set_XXX调用改为直接属性赋值(如rijndael.KeySize = 256)
  • 所有get_XXX调用改为直接读取属性值(如rijndael.KeySize / 8)
  • 用using语句管理所有实现IDisposable的对象,自动释放资源,替代手动try/finally
  • 解密时添加cryptoStream.FlushFinalBlock(),确保解密过程完成所有数据处理
  • 把硬编码的(CipherMode)1替换为枚举值CipherMode.CBC,提升代码可读性

修正后的代码可正确解密指定字节数组,得到test字符串。

内容的提问来源于stack exchange,提问作者Zgedek IKS DE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:07:29