JavaScript加密JSON对象

6

我有一个JSON对象,它是从一个表单的serializeArray函数生成的,我想对它进行加密。 我正在开发的应用程序只计划作为本地文件运行。 那么对数据进行加密最好的选项是什么?


为什么需要对表单数据进行加密?是为了传输、存储吗?你计划实现什么目标? - Paun Narcis Iulian
主要是由于数据的敏感性,我们只是为了告知用户已经采取了合理的预防措施来保护用户输入,同时承认由于使用JavaScript/浏览器的固有限制,它并不完全可靠。 - user3600400
如果使用HTTPS传输数据,则不需要额外的加密。 - zaph
该文件将作为本地文件运行,因此不会通过HTTPS进行传输。然而,由于localstorage存储为纯文本,用户希望存储的数据被加密,以便即使解决方案不是基于服务器而是基于客户端,也不会轻易被他人访问到。 - user3600400
我正在编写一个应用程序,它还需要“混淆”其配置文件,我使用内置的JS函数btoaatob将其转换为和从base64中进行转换。这不是加密,但可以防止大多数用户搞乱文件,并且不需要外部库。 - pasx
2个回答

10

只是一个想法。可以像这个示例中建议的那样使用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吗? - user3600400
使用你熟悉的工具。 - Paun Narcis Iulian

1
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接