Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有AES的客户端Javascript/JQuery实现?_Javascript_Jquery_Encryption_Cryptography_Aes - Fatal编程技术网

是否有AES的客户端Javascript/JQuery实现?

是否有AES的客户端Javascript/JQuery实现?,javascript,jquery,encryption,cryptography,aes,Javascript,Jquery,Encryption,Cryptography,Aes,首先,我读过这篇文章 第二,我在上读到了这篇文章,虽然这是一篇相对较新的文章,但大多数有希望的链接都已经失效了 第三,有人向我推荐,但这似乎是基于节点的,因此是服务器端的 这让我看了一下,这看起来很好,除了我不是一个密码学家,因此我没有资格评估它 我基本上是在寻找一个易于实现的客户端加密库。它将通过SSL传输,其主要目的只是在数据到达服务器之前对其进行加密,而不是在数据到达时进行加密。这只是一个宠物项目/概念验证,但我想做的事情尽可能接近正确 综上所述,是否存在可信/易于实现的客户端AES加密,

首先,我读过这篇文章

第二,我在上读到了这篇文章,虽然这是一篇相对较新的文章,但大多数有希望的链接都已经失效了

第三,有人向我推荐,但这似乎是基于节点的,因此是服务器端的

这让我看了一下,这看起来很好,除了我不是一个密码学家,因此我没有资格评估它

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

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

我推荐W3C新的下一代标准

现在已经开箱了。 它非常容易使用,与其他基于JS的解决方案相比,它的性能非常好

以下是我能想到的主要优势:

  • 无外部库(随浏览器提供)
  • 异步(不阻塞UI)
  • 多线程
  • 硬件加速
  • 接近本机性能(比传统加密库快10倍)
  • (可直接访问系统的安全随机数生成器)
有关旧浏览器支持的信息,请参见

以下是如何使用WebCryptoAPI进行加密的示例:
艾蒂安·马丁基本上是对的

如果您有选择的话,在浏览器中执行任何加密操作的唯一方法是WebCrypto,它非常好

但是,如果你需要在像IE这样的旧浏览器上工作,你可以使用基于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);
    });
函数stringToArrayBuffer(str){
var buf=新阵列缓冲区(str.length);
var bufView=新的UINT8阵列(buf);
对于(变量i=0,strLen=str.length;i
(1)SJCL的作者之一是Dan Boneh,他是该领域的世界领先专家之一。如果你有时间的话,他的MOOC是值得的。(2) 如果您可以使用SSL来交付Javascript,那么为什么还需要这些代码呢?(3) 您之前提到的问题已关闭,因为它与此网站无关。你问的是同一个问题,所以恐怕你的问题也离题了。1)我来看看,谢谢。2) 我可以使用SSL来传递代码,但我不想访问返回的数据。希望客户端对其进行加密并以该形式返回。3) 道歉-你能推荐一个更好的场地吗?:)(1) 我可以推荐它:-D(2),但AES是对称的。如果您的服务器提供加密代码和加密密钥,则它可以访问返回的数据。使用非对称加密(RSA)不是更好吗?(3) 也许reddit可以提供帮助(/r/crypto)2)我只想使用SSL连接将代码传递给客户端,并让客户端在将数据返回到服务器之前创建自己的密钥/密码。但无论如何,我显然偏离了主题(可以理解,因为我的帖子中没有一行代码),所以我将结束这篇文章。这太棒了,我不知道WebCryptoLiner,谢谢Ryan!在完全公开的情况下,它是我的一个库,但它做到了。您甚至可以使用或在节点上执行同构代码