我正在尝试使用sjcl对arraybuffer进行加密和解密。我可以在源码中看到sjcl有一个arraybuffer的编解码器,但我就是不知道如何使用它:
const buffer = new ArrayBuffer(64);
const view = new Uint8Array(buffer);
console.log(view.length)
var encrypted = sjcl.encrypt("password", buffer)
console.log(encrypted.length)
var decrypted = sjcl.decrypt("password", encrypted)
console.log(decrypted.length) 第一个console.log()打印64 (这很有意义)。第二个console.log()打印150 (加密结果的大小)...但是第三个console.log总是打印0。
发布于 2020-07-23 04:42:47
sjcl的用法和文档与其用途一样晦涩难懂,但您想要实现的当然是可能的。
首先,您必须使用arrayBufferCodec编解码器将ArrayBuffer转换为sjcl自己的内部bitArray表示。然后,需要再次将其转换为可提供给sjcl.encrypt()方法的Base64字符串。与此过程相反的是,将返回原始的ArrayBuffer。
下面是一个例子:
var buffer = new ArrayBuffer(64);
var view = new Uint8Array(buffer);
for (var i = 0; i < view.length; i++) {
view[i] = i;
}
var arrayBufferBits = sjcl.codec.arrayBuffer.toBits(buffer);
var base64String = sjcl.codec.base64.fromBits(arrayBufferBits);
var encrypted = sjcl.encrypt("password", base64String);
var decrypted = sjcl.decrypt("password", encrypted);
var base64Bits = sjcl.codec.base64.toBits(decrypted);
var buffer2 = sjcl.codec.arrayBuffer.fromBits(base64Bits);
view = new Uint8Array(buffer2);
console.log(view);<script type="text/javascript" src="https://bitwiseshiftleft.github.io/sjcl/sjcl.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/sjcl@1.0.8/core/codecArrayBuffer.js"></script>
https://stackoverflow.com/questions/63041013
复制相似问题