2011-09-30 55 views
1
var Obj = {}; 
Obj.ID = e.row.ID; 
Obj.firstName = e.row.firstName; 
Obj.lastName = e.row.lastName; 

這是我的對象,我將這個對象保存在一個文件中。現在在保存到文件之前,我想加密它並保存,同時閱讀我想解密和閱讀。在javascript中加密對象

var newFile = FileSystemPath; 
newFile.write(JSON.stringify(object)); 
  1. 我應該字符串化之前或之後進行加密的對象。
  2. 什麼是在javascript中加密對象的方法。任何例子 會很好。

回答

5

你真的不能加密的對象,但你可以加密字符串,所以你應該首先做一個對象序列化(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函數,或者對象具有循環引用的地方。