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

C# WFA项目如何加密或隐藏JSON文件数据,禁止用户读取复制

C# WinForm JSON数据保护实现方案

推荐实现路径(优先级从高到低)

  • 方案1:加密后内嵌到程序集资源(最推荐,无额外文件)
    你只有300KB的小体积数据,完全不需要单独放外置文件,直接把加密后的JSON字节流嵌入到程序的资源文件中即可,用户根本找不到单独的相关文件,安全门槛更高。
    操作步骤:
    1. 提前用AES对称加密算法把原JSON文件加密为二进制数据
    2. 右键项目→属性→资源→添加资源→添加现有文件,把加密后的二进制文件加进去,默认会生成强类型的资源属性,运行时直接读取即可
    3. 程序启动后读取资源里的二进制数据,解密后直接反序列化为C#对象使用,不需要落地到本地磁盘
      注意:密钥不要明文硬编码在代码中,可以拆分为多段常量分散存储在不同类中,配合代码混淆工具(如免费的ConfuserEx)做字符串混淆,避免被直接反编译拿到密钥。
  • 方案2:加密后作为外置文件存储,运行时解密读取
    如果后续需要更新JSON数据不想重新编译程序,可以选这个方案。
    操作要点:
    1. 加密算法同样选AES即可,300KB数据解密耗时基本可以忽略
    2. 加密后的文件修改后缀名(比如改为.dat/.bin),不要保留.json后缀,避免被用户直接识别
    3. 可以在校验文件哈希通过后再解密,避免用户篡改文件内容

简化代码示例

AES解密的核心代码参考:

public static string AesDecrypt(byte[] cipherData, byte[] key, byte[] iv)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = key;
        aes.IV = iv;
        ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
        using (MemoryStream ms = new MemoryStream(cipherData))
        using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
        using (StreamReader sr = new StreamReader(cs))
        {
            return sr.ReadToEnd();
        }
    }
}

解密得到JSON字符串后直接用Newtonsoft.Json或者System.Text.Json反序列化即可。

补充说明

所有本地运行的程序都不存在绝对的防破解方案,上述方法可以挡住99%以上的普通用户,避免JSON内容被直接读取复制,对于常规场景完全够用。如果需要更高的安全等级,可以考虑把核心数据放到服务端通过接口请求,但会增加开发和运维成本,对于纯客户端工具来说没有必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 09:33:02