使用JavaScript加密本地存储的数据

时间:2012-11-21 06:32:27

标签: javascript security

当我正在学习JavaScript和HTML5时,我正在尝试构建一个基本的测验应用程序,该应用程序会询问一些可在移动网络上运行的多项选择问题,以及使用PhoneGap的应用程序。当问题被问到时,结果将存储在本地。

我希望PhoneGap版本允许离线模式,因此数据存储在本地的能力是必须。我知道有一个通过PhoneGap提供的本地数据库 - 所以我想一个选择是使用PhoneGap为Mobile Web和本地数据库做客户端/服务器。但是,我现在宁愿避免走这条路,因为这意味着我必须管理移动网络和PhoneGap版本之间的更多变化。

显然不需要互联网银行级别的安全性,但我需要将结果存储在本地,这些结果不易被轻易读取,但最重要的是被操纵。

我最初尝试使用 HTML5 localstorage ,但我很快意识到至少按照我的方式,我可以看到我存储的所有结果以及使用Chrome开发者工具,可以轻松点击更改值。

当我走下使用加密(I was reading this StackOverflow post with interest)的道路时,似乎对于这样的事情我总是必须在代码中的某处定义一个“密钥”以加密数据然后使用解密它的密钥相同。

由于所有数据都存储在客户端,这意味着我所要做的就是找到这个键并对存储的数据运行它来操作结果。

2 个答案:

答案 0 :(得分:0)

base64编码会起作用吗?它内置于浏览器中,看起来是加密的。人们总是这样做饼干。

资源(特定于Mozilla):

有关非Mozilla浏览器的更多信息和链接,请参阅此问题:JSON encode/decode base64 encode/decode in JavaScript

答案 1 :(得分:0)

CryptoJS AES. Thanks to Leigh

var text = "#rawString#";
var key = CryptoJS.enc.Base64.parse("#base64Key#");
var iv  = CryptoJS.enc.Base64.parse("#base64IV#");

console.log("Initial String:: "+text);

var encrypted = CryptoJS.AES.encrypt(text, key, {iv: iv});
console.log("Encrypted String:: "+encrypted.toString());

var decrypted = CryptoJS.AES.decrypt(encrypted, key, {iv: iv});
console.log("Decrypted String:: "+decrypted.toString(CryptoJS.enc.Utf8));

Plnkr Demo Link