首先,我读过这个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/