javascript - 是否有 AES 的任何客户端 Javascript/JQuery 实现?

标签 javascript jquery encryption cryptography aes

首先,我读过这个article .

其次,我在 StackOverflow 上阅读了这篇文章,虽然它是相对较新的,但大多数有前途的链接都已失效。

三、有人推荐Crypto-JS对我来说,但这似乎是基于节点的,因此是服务器端的。

这让我看了一下 Stanford Javascript Crypto Library ,看起来不错,但我不是密码学家,因此没有资格评估它。

我基本上是在寻找一个易于实现的客户端加密库。它将通过 SSL 传送,其主要目的只是在数据到达服务器之前加密数据,而不是在数据到达时加密。这只是一个宠物项目/概念验证,但我想做的事情尽可能接近正确。

综上所述,是否存在可信/易于实现的客户端 AES 加密,作为 jQuery 插件(值得怀疑,我能找到的唯一提供 RC4 encryption 的插件)或普通的旧 Javascript?或者这是一个徒劳的想法?

最佳答案

Etienne Martin 基本上是对的。

如果可以选择,您应该在浏览器中进行任何加密的唯一方法是 WebCrypto,它非常好 supported by user agents now.

但如果您需要在 IE 等较旧的浏览器上工作,您可以使用 - https://github.com/PeculiarVentures/webcrypto-liner并且您的基于 Webcrypto 的代码将工作得很好。

还要确保使用 AES-GCM,它是 AES 的一种身份验证模式,是正确的使用方法。

你想要的看起来像:

function stringToArrayBuffer(str) {
    var buf = new ArrayBuffer(str.length);
    var bufView = new Uint8Array(buf);
    for (var i = 0, strLen = str.length; i < strLen; i++) {
        bufView[i] = str.charCodeAt(i);
    }
    return buf;
}

function arrayBufferToString(str) {
    var byteArray = new Uint8Array(str);
    var byteString = '';
    for (var i = 0; i < byteArray.byteLength; i++) {
        byteString += String.fromCodePoint(byteArray[i]);
    }
    return byteString;
}

var text = "I am clear text";
console.log("what we will encrypt:");
console.log(text);

var data = stringToArrayBuffer(text);
console.log("what we encode to:");
console.log(data);

window.crypto.subtle.generateKey({
            name: "AES-GCM",
            length: 256, //can be  128, 192, or 256
        },
        false, //whether the key is extractable (i.e. can be used in exportKey)
        ["encrypt", "decrypt"] //can be "encrypt", "decrypt", "wrapKey", or "unwrapKey"
    )
    .then(function(key) {
        //returns a key object
        console.log("our key:");
        console.log(key);

        window.crypto.subtle.encrypt({
                    name: "AES-GCM",
                    //Don't re-use initialization vectors!
                    //Always generate a new iv every time your encrypt!
                    iv: window.crypto.getRandomValues(new Uint8Array(16)),
                },
                key, //from generateKey or importKey above
                data //ArrayBuffer of data you want to encrypt
            )
            .then(function(encrypted) {
                //returns an ArrayBuffer containing the encrypted data
                console.log("our ciphertext:");
                console.log(new Uint8Array(encrypted));
            })
            .catch(function(err) {
                console.error(err);
            });
    })
    .catch(function(err) {
        console.error(err);
    });

关于javascript - 是否有 AES 的任何客户端 Javascript/JQuery 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43748286/

相关文章:

javascript - Joi Schema 应该包含一个或另一个字段

javascript - 只有数字。在React中输入数字

jquery - 这个 jquery 选择器选择什么

java - 是否可以在 Android 上禁用 AES/CCM 中的消息身份验证检查?

encryption - 如何为AES加密生成随 secret 钥?

encryption - 如何将 256 位公钥编码为可变长度的字序列

javascript - 当函数作为链中的参数传递时,"this"未定义

带通配符的 Javascript 选择器

php - jQuery/PHP - 按 PHP 数组值对 html 列表进行排序?

javascript - jquery remove 从另一个元素中删除