【问题标题】:Javascript encryption for JSON objectJSON对象的Javascript加密
【发布时间】:2018-07-17 19:09:37
【问题描述】:

我有一个 JSON 对象,它是从我想加密的表单上的 serializeArray 生成的。我正在处理的应用程序旨在仅作为本地文件运行。加密数据的最佳选择是什么?

【问题讨论】:

  • 为什么需要加密表单数据?用于运输、储存?你打算实现什么目标?
  • 这主要是因为数据的敏感性只是为了让我们可以告知用户已采取合理的预防措施来保护用户输入,同时承认由于固有的限制它并非完全万无一失使用 javascript/浏览器。
  • 如果使用 HTTPS 传输数据,则无需额外加密。
  • 该文件将作为本地文件运行,因此不会通过 HTTPS。但是,由于 localstorage 以纯文本形式存储,因此用户希望对存储的数据进行加密,这样其他人就不会那么容易地访问它,即使该解决方案不是理想的,因为它是基于客户端的,而不是基于客户端的。基于服务器
  • 我正在编写一个应用程序,该应用程序还需要“混淆”其配置文件,我使用内置 JS 函数 btoaatob 与 base64 进行转换。这不是加密,但可以防止大多数用户弄乱文件并且不需要外部库。

标签: jquery encryption serialization cryptography


【解决方案1】:

只是一个想法。按照此示例中的建议使用 cryptoJS:

var secret = "My Secret Passphrase";
var plainText = "the brown fox jumped over the lazy dog";
var encrypted = CryptoJS.AES.encrypt(plainText, secret);
var decrypted = CryptoJS.AES.decrypt(encrypted, secret);

document.getElementById("m1").innerHTML = encrypted;
document.getElementById("m2").innerHTML = decrypted;
document.getElementById("m3").innerHTML = decrypted.toString(CryptoJS.enc.Utf8);
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
<label>encrypted</label>
<div id="m1"></div>
<br>
<label>decrypted</label>
<div id="m2"></div>
<br>
<label>Original message</label>
<div id="m3"></div>

并在将所有数据放入本地存储之前对其进行加密。 除了向用户询问某种密码之外,我看不出如何实现这一点。

【讨论】:

  • CryptoJS 还在开发中吗?我应该考虑使用 WebCrypto 吗?
  • 使用你喜欢的。
【解决方案2】:
Try out this. This worked out for me well for dynamic json data as well as normal text.

var key = CryptoJS.enc.Utf8.parse("93wj660t8fok9jws");
// Please parse the your secret key
var iv = CryptoJS.enc.Utf8.parse(CryptoJS.lib.WordArray.random(128 / 8));

function encrypt(plainText) {
     return CryptoJS.AES.encrypt(
plainText, key,{ iv: iv,padding:CryptoJS.pad.Pkcs7,
mode:CryptoJS.mode.CBC }).ciphertext.toString(CryptoJS.enc.Base64);
}
function decrypt(encryptedText) {  
    var cipherParams = CryptoJS.lib.CipherParams.create(
    {
        ciphertext: CryptoJS.enc.Base64.parse(encryptedText)
    });
    return CryptoJS.AES.decrypt(cipherParams, key, { iv: iv,
                               padding: CryptoJS.pad.Pkcs7,
                               mode: CryptoJS.mode.CBC
                              }).toString(CryptoJS.enc.Utf8);
}
    var start = new Date().getTime();
var encrypted = encrypt(
'{\"name\": \"Sushant\", \"loves\": \"cats\"}'
);
    var end = new Date().getTime();
console.log(end - start);
document.getElementById('enc').innerHTML = encrypted;
document.getElementById('dec').innerHTML = decrypt(encrypted);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2021-07-20
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2018-08-16
    相关资源
    最近更新 更多