【问题标题】:Javascript: Hiding/Making it difficult to understand client objectsJavascript:隐藏/使其难以理解客户端对象
【发布时间】:2015-02-14 12:12:44
【问题描述】:

是否有任何已知的方法可以“隐藏”或让用户难以查看和理解我的客户端对象(存储为 JSON 对象)? 我想要这样做的原因是因为我不希望其他人简单地复制我的数据。

考虑到我是从服务器端获取数据而不是直接将其提取到 JSON 对象,我猜我可以添加一些算法来混合服务器上的数据,只有我知道如何将其重新插入客户端。

我当然知道这不是 100% 隐藏的解决方案,因为所有内容在客户端仍然可见。

我希望我的问题能够很好地表达以理解我的目标。

【问题讨论】:

    标签: javascript jquery json


    【解决方案1】:

    我猜你只是想对 json 对象进行编码并在客户端存储/使用它。

    如果我的理解是正确的,您可以考虑以下方式。 这个想法是从服务器编码我们的数据并在客户端解码它。虽然这种方式对用户来说并不是完全不可见的,但是在缩小脚本之后,获取解码数据比仅仅将 json 存储在客户端变量中需要花费很多时间和精力。

    例如在服务器端:

    var json = {
      name: 'Alex',
      age: 25,
      location: 'LA'
    };
    
    function utf8_to_b64(str) {
      // or something equivalent in your lang. Here we use nodejs
      return new Buffer(str).toString('base64');
    }
    
    var json_str = JSON.stringify(json);
    // "{"name":"Alex","age":25,"location":"LA"}"
    
    send_to_client(utf8_to_b64(json_str));
    // "eyJuYW1lIjoiQWxleCIsImFnZSI6MjUsImxvY2F0aW9uIjoiTEEifQ=="
    

    客户端:

    function b64_to_utf8(str) {
      return decodeURIComponent(escape(window.atob(str)));
    }
    
    var got_from_server = "eyJuYW1lIjoiQWxleCIsImFnZSI6MjUsImxvY2F0aW9uIjoiTEEifQ==";
    
    var decoded = b64_to_utf8(got_from_server);
    // "{"name":"Alex","age":25,"location":"LA"}"
    
    var boom = JSON.parse(decoded);
    // get our 'real' json back!
    

    希望对你有帮助

    参考:Base64 encoding and decoding from MDN

    【讨论】:

    • 嘿伊恩,感谢您的回答,但我仍然想知道是否有可能以某种方式混合更多数据,也许使其成为随机算法或更巧妙地改组属性。我相信我不是唯一一个这样想的人
    • 尽管 b64 转换看起来足够聪明,但在一个 b64 到 utf8 函数之后,它仍然看起来很容易获得对象
    • 看看这个可能重复的问题:Can I encrypt my JSON data
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多