【问题标题】:Encrypting locally stored data with JavaScript使用 JavaScript 加密本地存储的数据
【发布时间】:2022-04-27 06:24:56
【问题描述】:

在学习 JavaScript 和 HTML5 的同时,我正在尝试构建一个基本的测验应用程序,该应用程序会提出一些适用于移动网络的多项选择题,也可以作为使用 PhoneGap 的应用程序。当提出问题时,结果会存储在本地。

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

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

我最初尝试使用 HTML5 localstorage,但我很快意识到,至少我这样做的方式是,通过使用 Chrome 开发者工具,我可以清楚地看到我存储的所有结果,可以轻松地单击更改值。

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

由于所有数据都存储在客户端,这意味着我所要做的就是找到此密钥并针对存储的数据运行它以操纵结果。

【问题讨论】:

  • 您正试图缓解什么威胁?除了非技术人员的随意检查之外,我想不出任何可以减轻这种情况的方法。不过我很想被证明是错误的。
  • 这个练习真的是关于我学习如何构建 HTML5/JS 移动网络应用程序,而不是关于我放在应用商店中的东西。我想我对最终允许在线同步分数有一些模糊的想法,可能以排行榜的方式与其他玩家对抗。不过,我仍然想为游戏提供离线选项,这就是离线存储的原因。我知道有人不可能在离线场景中使用移动网络,但是他们可以使用该应用程序,我不希望从根本上以两种不同的方式构建每个版本。
  • 而且人们可以直接进入浏览器并通过编辑网络存储来更改他们的分数这一事实似乎不是一个好策略。为了清楚起见——他们可以查看存储在网络存储中的“记分卡”并操纵这些值。即使它使用了我发现的某种形式的加密——他们仍然可以跟踪该字符串并对其进行操作。
  • 没错。当所有逻辑都在客户端时,很难想象有任何方案不会受到这种影响。
  • 感谢 Eric 的反馈,作为 HTML5/JS 的学生,这是一次很好的学习客户端存储限制的经验!

标签: javascript security


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    base64 编码可以工作吗?它内置在浏览器中,看起来是加密的。人们一直在为 cookie 这样做。

    资源(Mozilla 特定):

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

    【讨论】:

    • 感谢您的评论,但光看它就不会有人猜测它是base64加密的,然后轻松解密吗?
    • 它让诚实的人保持诚实,并且无论如何你都需要对 localStorage 的二进制数据进行 base64 编码,因为它只支持字符串数据。您确实说过您不需要银行级别的安全性,对吧?
    • base64 不是加密,它提供零安全性。
    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2018-07-28
    • 1970-01-01
    • 2016-10-15
    • 2016-12-08
    • 2022-01-10
    相关资源
    最近更新 更多