是否有AES的客户端Javascript/JQuery实现?
首先,我读过这篇文章 第二,我在上读到了这篇文章,虽然这是一篇相对较新的文章,但大多数有希望的链接都已经失效了 第三,有人向我推荐,但这似乎是基于节点的,因此是服务器端的 这让我看了一下,这看起来很好,除了我不是一个密码学家,因此我没有资格评估它 我基本上是在寻找一个易于实现的客户端加密库。它将通过SSL传输,其主要目的只是在数据到达服务器之前对其进行加密,而不是在数据到达时进行加密。这只是一个宠物项目/概念验证,但我想做的事情尽可能接近正确 综上所述,是否存在可信/易于实现的客户端AES加密,或者作为jQuery插件(值得怀疑,这是我能找到的唯一一个插件),或者简单的旧Javascript?或者这是一个徒劳的想法?我推荐W3C新的下一代标准 现在已经开箱了。 它非常容易使用,与其他基于JS的解决方案相比,它的性能非常好 以下是我能想到的主要优势:是否有AES的客户端Javascript/JQuery实现?,javascript,jquery,encryption,cryptography,aes,Javascript,Jquery,Encryption,Cryptography,Aes,首先,我读过这篇文章 第二,我在上读到了这篇文章,虽然这是一篇相对较新的文章,但大多数有希望的链接都已经失效了 第三,有人向我推荐,但这似乎是基于节点的,因此是服务器端的 这让我看了一下,这看起来很好,除了我不是一个密码学家,因此我没有资格评估它 我基本上是在寻找一个易于实现的客户端加密库。它将通过SSL传输,其主要目的只是在数据到达服务器之前对其进行加密,而不是在数据到达时进行加密。这只是一个宠物项目/概念验证,但我想做的事情尽可能接近正确 综上所述,是否存在可信/易于实现的客户端AES加密,
- 无外部库(随浏览器提供)
- 异步(不阻塞UI)
- 多线程
- 硬件加速
- 接近本机性能(比传统加密库快10倍)
- (可直接访问系统的安全随机数生成器)
艾蒂安·马丁基本上是对的 如果您有选择的话,在浏览器中执行任何加密操作的唯一方法是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!在完全公开的情况下,它是我的一个库,但它做到了。您甚至可以使用或在节点上执行同构代码