如何对本地存储数据进行密码保护
How can I password protect localstorage data?
本地存储在没有任何保护的情况下存储。Web应用程序对服务器的依赖性正在降低。
一个使用本地存储进行数据存储的应用程序如何存储数据,以便需要密码才能读取。
服务器上的密码通常通过使用类似SHA1或SHA512的哈希来工作。当服务器收到一个带有密码的请求时,它会对其进行散列处理并进行比较。如果它们匹配,服务器将加载一些数据,对其进行处理,并将其发送回用户。如果我们尝试使用客户端JavaScript来实现这一点,我们必须已经有了可用的纯文本。
哈希的另一种选择是加密,例如AES。谷歌上有一个加密js库,它提供这样的服务。独立的缩小版AES文件在gzip之前大约为13kb。
该库的一个限制是AES数据的JSON序列化。他们的文档确实提供了解决方案。
注意:这不是对对象进行JSON编码,而是对解密对象所需的数据进行JSON编码(当然,密码除外)
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;
}
};
为了存储数据,我们可以这样做
var encoded = CryptoJS.AES.encrypt(JSON.stringify(data), password, {format: JsonFormatter}).ciphertext.toString();
localStorage.setItem("secret_stuff", encoded);
要把它拿回来,我们可以做:
var stored = localStorage.getItem("secret_stuff");
var jsonString = CryptoJS.AES.decrypt(stored, password, {formatter: JsonFormatter}).toString();
var secretObject = JSON.parse(jsonString);
如果用户几分钟内没有移动鼠标,那么"忘记"用户的密码可能也是明智的。
相关文章:
- 如何对单个页面进行密码保护(这不是身份验证系统的一部分)
- Navgoco不是一个影响密码保护页面的功能
- 为每个页面设置密码保护
- 如何使用密码保护某些HTML页面
- Nodejitsu:有没有一种方法可以对应用程序进行密码保护
- 使用jquery解析受密码保护的jsonurl
- 使用php进行密码保护重定向
- 有没有一种安全的方法可以将 React.js 与 Python Flask 后端用于多用户、受密码保护的站点
- GWT:登录到受密码保护的第三方网站
- 如何在javascript中创建受密码保护的应用程序
- 使用JavaScript(客户端)提取受密码保护的ZIP文件
- 如何防止子文件夹通过匿名 http-url-path 访问,尽管父文件夹上有受密码保护的 aspx.default 文件
- 如何在 JavaScript 中制作受密码保护的页面
- NodeJS网页抓取工具,用于受密码保护的网站
- 如何用密码保护表单中的任何字段(需要建议)
- 简单的JavaScript密码保护在移动平台上不起作用
- 在网页上设置可下载文件的密码保护
- 如何对本地存储数据进行密码保护
- 密码保护页面
- X10Hosting密码保护页面