在javascript中加密对象

时间:2011-09-30 07:00:10

标签: javascript

var Obj = {};
Obj.ID = e.row.ID;
Obj.firstName = e.row.firstName;
Obj.lastName = e.row.lastName;

这是我的对象,我将此对象保存在文件中。现在在保存到文件之前,我想加密它并保存并在阅读时我想要解密和阅读。

var newFile = FileSystemPath;
newFile.write(JSON.stringify(object));
  1. 我应该在对象之前或之后加密对象。
  2. 在javascript中加密对象的方法有哪些?任何例子 会很棒。

1 个答案:

答案 0 :(得分:9)

你无法真正加密对象,但你可以加密字符串,所以你应该先做一个对象序列化(JSON.stringify),然后用对称加密算法加密它,这样你就可以解码对象以后 我无法真正提供一个好的例子,因为javascript总是会有严重的安全问题(作为客户端编程语言),即使你尝试了一个相当复杂的算法(例如AES),它仍将是易受攻击,因为用户只能看到您的源代码,因此请查看您的编码/解密算法 如果你只是想稍微改变字符串以便在第一次看时无法解密,你可以简单地使用一些内置的javascript方法(例如encodeURI / decodeURI),或者你可以做一些字符替换甚至使用{ {3}}。

以下是如何“加密”对象的示例演示:

function encript(o, salt) {
    o = JSON.stringify(o).split('');
    for(var i = 0, l = o.length; i < l; i++)
        if(o[i] == '{')
            o[i] = '}';
        else if(o[i] == '}')
            o[i] = '{';
    return encodeURI(salt + o.join(''));
}

 function decript(o, salt) {
    o = decodeURI(o);
    if(salt && o.indexOf(salt) != 0)
        throw new Error('object cannot be decripted');
    o = o.substring(salt.length).split('');
    for(var i = 0, l = o.length; i < l; i++)
        if(o[i] == '{')
            o[i] = '}';
        else if(o[i] == '}')
            o[i] = '{';
    return JSON.parse(o.join(''));
}

var obj = {
    key : 'value',
    3 : 1
};
var salt = "some string here";
var encripted = encript(obj, salt);
var decripted = decript(encripted, salt);

当然,这只是一个例子,您应该修改它以便编写更复杂的对象,您需要ecnript函数,或者对象具有循环引用。