You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在C#中解密或禁用Eazfuscator对Newtonsoft JSON数据的加密?

解决Eazfuscator与Newtonsoft JSON冲突导致JSON数据加密/乱码的问题

遇到这种情况很常见——Eazfuscator的混淆(尤其是虚拟化和加密功能)会无意中干扰Newtonsoft.Json的序列化过程,导致输出的JSON要么是属性名被重命名成乱码,要么是字符串内容被加密。下面给你两种解决方案,优先推荐禁用不必要的加密/混淆,这是最直接的办法;如果需要处理已加密的JSON,也有对应的思路。

一、禁用Eazfuscator对JSON相关代码的加密/混淆

1. 用属性标记排除特定类/方法

你可以给需要序列化的DTO模型类、或者序列化方法添加Obfuscation属性,明确告诉Eazfuscator跳过对这些元素的混淆和加密:

using System.Reflection;
using Newtonsoft.Json;

// 排除整个模型类的所有混淆操作(重命名、控制流混淆、加密)
[Obfuscation(Exclude = true, Feature = "renaming,control flow,encryption")]
public class UserData
{
    public string Name { get; set; }
    public int Age { get; set; }
}

// 或者只排除特定的序列化方法
[Obfuscation(Exclude = true, Feature = "encryption")]
public string SerializeUserData(UserData data)
{
    return JsonConvert.SerializeObject(data);
}

这里的Feature参数可以精准控制要排除的混淆类型:renaming避免属性名被重命名,encryption避免字符串或代码被加密,control flow避免控制流混淆影响序列化逻辑。

2. 全局配置排除规则

如果你的模型类很多,不想逐个加属性,可以在Eazfuscator的项目配置里添加全局排除规则:

  • 打开项目的Eazfuscator配置文件(通常是Eazfuscator.NET.xml
  • 添加排除节点,比如排除你的模型命名空间,或者直接排除Newtonsoft.Json的核心类型:
<eazfuscator.net>
  <exclude type="YourProject.Models.*" />
  <!-- 可选:排除Newtonsoft.Json的核心序列化类,避免混淆影响序列化逻辑 -->
  <exclude type="Newtonsoft.Json.*" />
</eazfuscator.net>

或者在Visual Studio的项目属性 -> Eazfuscator.NET选项里,找到“排除”面板,添加对应的命名空间或类型。

3. 保留属性名的替代方案(不用完全排除)

如果不想完全禁用混淆,只是希望JSON的属性名保持可读,可以给模型属性添加Newtonsoft.Json的[JsonProperty]属性,指定固定的JSON键名:

public class UserData
{
    [JsonProperty("user_name")]
    public string Name { get; set; }
    
    [JsonProperty("user_age")]
    public int Age { get; set; }
}

这样即使Eazfuscator把Name重命名成a或其他乱码,Newtonsoft.Json序列化时依然会用你指定的user_name作为键,输出正常的JSON结构。

二、解密已生成的加密JSON数据

如果已经有了被加密的JSON文件/内容,想要解密的话,需要注意:
Eazfuscator的加密(尤其是带密码的虚拟化)是和你的混淆后程序绑定的——加密密钥会嵌入程序,并且依赖程序的元数据进行解密。单独手动解密几乎不可能,除非你能:

  1. 将加密的JSON内容传入你混淆后的程序中,让程序运行时自动解密(因为Eazfuscator会在运行时自动处理加密的字符串/代码)
  2. 如果你记得混淆时设置的密码,可以尝试使用Eazfuscator的API(在混淆后的程序中)提取解密后的内容。

不过更推荐的还是先调整Eazfuscator的配置,避免JSON被加密,这样后续生成的JSON都是正常可读的。

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

火山引擎 最新活动