如何使用javaScript解密localStorage中的加密密码

时间:2013-10-06 01:59:34

标签: javascript html5 encryption cryptography

我使用localStorage来存储数据,我想加密密码,然后当在localStorage中加密密码时,我现在要解密它以便能够登录。我尝试加密工作但解密不起作用,错误信息是: 未捕获的SyntaxError:意外的输入结束

我使用的是CryptoJS v3.1.2 code.google.com/p/crypto-js

这里是代码:

var JsonFormatter = {
stringify: function (cipherParams) {
var jsonObj = {ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64)};
    if (cipherParams.iv) {jsonObj.iv = cipherParams.iv.toString();}
    if (cipherParams.salt) {jsonObj.s = cipherParams.salt.toString();}
    return JSON.stringify(jsonObj);
},
 parse: function (jsonStr) {
    var jsonObj = JSON.parse(jsonStr);
    var cipherParams = CryptoJS.lib.CipherParams.create({
        ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)
    });
    if (jsonObj.iv) {cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv)}
    if (jsonObj.s) {cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s)}
    return cipherParams;
}
};

encryption.js

function btnSubmit(){

var p = document.getElementById("setpass").value;
if(p.length >= 5){

    var password = localStorage["Password"];
    var encoded = CryptoJS.AES.encrypt(JSON.stringify(p), password, {format: JsonFormatter}).ciphertext.toString();
    localStorage.setItem("Password", encoded);

    jAlert('Password is set', 'URIBlocker');
        window.location.reload();
}
else
{
    //Notification
} 
}

decrypt.js

function login() {

var usepass = document.getElementById('usepass').value;

var password = localStorage["Password"];
var encrypted = localStorage.getItem("Password");
var decrypted = CryptoJS.AES.decrypt(encrypted, password, {formatter: JsonFormatter}).toString();
var secret = JSON.parse(decrypted);


if (usepass === secret)
 {                          
    $('.bd_class').show();
    $('.go_class').hide();
 }
 else
 {
    $('.bd_class').hide();
    $('go_class').show();

}
}

出了点问题,我不知道错误是Uncaught SyntaxError:意外的输入结束

1 个答案:

答案 0 :(得分:0)

您没有正确处理错误。您遇到的错误是处理失败的typecast

使用JSON objects时,最好使用' try / catch'包装技术处理格式不正确的输入/输出到.stringify()& .parse()函数。

示例:

try {
  JSON.stringify(obj_or_array);
catch(err) {
  Throw new Error(err);
}

try {
  JSON.parse(str);
catch(err) {
  Throw new Error(err);
}

关于不重新发明轮子,也许crypt.io会有所帮助。

如果没有提供密码,它会为您的系统派生一个唯一的密码。

简单用法;

var storage = cryptio
  , inventory = [{
      "SKU": "39-48949",
      "Price": 618,
      "Item": "Snowboard"
    }, {
      "SKU": "99-28128",
      "Price": 78.99,
      "Item": "Cleats"
    }, {
      "SKU": "83-38285",
      "Price": 3.99,
      "Item": "Hockey Puck"
    }];

storage.set('inventory', inventory, function(err, results){
  if (err) throw err;
  console.log(results);
});

storage.get('inventory', function(err, results){
  if (err) throw err;
  console.log(results);
});