我使用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:意外的输入结束
答案 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);
});