你真的不能加密的對象,但你可以加密字符串,所以你應該首先做一個對象序列化(JSON.stringify
),然後用對稱加密算法進行加密,這樣你就可以對物體進行解碼後來。
我真的無法提供一個很好的例子,因爲JavaScript總是會有嚴重的安全問題(作爲客戶端編程語言),即使您嘗試一個相當複雜的算法(如AES),它仍然是脆弱的,因爲用戶可以看到你的源代碼,從而看到你的加/解算法。
如果你只是想改變一下字符串,所以它不能在第一次看來破譯,你可以簡單地使用一些內置的JavaScript方法(如encodeURI/decodeURI),或者你可以做一些字符替換,甚至使用salts。
下面是一個對象如何可以「加密」樣本演示:
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);
當然,這只是一個例子,你應該修改它以encript更復雜的對象,你需要ecnript函數,或者對象具有循環引用的地方。