javascript - 当 PassPhrase 相同时,需要 SJCL 进行相同的加密 AES 256 输出

标签 javascript node.js file-upload cryptography aes

我正在使用 Node.js 上传在客户端加密的文件,并使用 SJCL(斯坦福 Javascript 加密库)通过 Javascript 加密文件。

但我注意到,即使使用相同的密码,加密的输出或结果也总是不同。

经过一些研究,我发现这是因为盐每次都是随机的,我需要做一个“nosalt”(抱歉,我对这里的密码学、Node.js 都是新手)

当密码相同时,如何更改我的代码(或 SJCL 代码)以每次生成准确的加密输出。

我的应用程序基于“Cryptloader”项目,您可以在这里找到它:https://github.com/Kryil/Cryptloader

加密:

var part = file_queue[data["id"]].slice(start, end)

var reader = new FileReader()
reader.onload = function(e)
{
var passwd = document.getElementById("password").value

console.log("Uploading arraybuffer of size " + e.target.result.byteLength)
var i32a = new Int32Array(e.target.result)

var out = i32a.toJSONArray()

console.log("crypting: " + out)

var crypted = sjcl.encrypt(passwd, out)

ws.send(JSON.stringify({
      "type": "fileslice",
      "data": {"id": data["id"], "slice": slice, "data": crypted}
}))
}
reader.readAsArrayBuffer(part)

解密:

var decrypted = sjcl.decrypt(passwd, data["data"])

file_contents[file]["data"].push(new Int32Array(JSON.parse(decrypted)))

这是一个无关紧要的问题,但并非所有文件都能正确上传,其中一些文件会产生错误,但是当我将 Int32Array 更改为 Int16Array 或 Int8Array 时,它对它们有效,但对其他文件会产生错误,是什么原因导致的以及如何修复它。 错误:

Uncaught RangeError: ArrayBuffer length minus the byteOffset is not a multiple of the element size.
(Chrome Latest version, Win 7)

最佳答案

不仅仅是salt 使得每次iv 的密文都不同。但这些都是提供语义安全性的安全功能,您确实不应该禁用,也不应该禁用,因为 salt 和 iv 可以包含在密文中,没有任何东西可以阻止您稍后使用随机 saltiv 进行解密。

也就是说,您使用的 encrypt 函数允许您传递自己填写的加密参数,包括 saltiv,但将这些硬编码为固定值(我想强烈指出)不是 API 意图,也是对 API 的滥用。

关于javascript - 当 PassPhrase 相同时,需要 SJCL 进行相同的加密 AES 256 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841581/

相关文章:

node.js - 我应该如何将我的语言服务器与我的客户端打包在一起?

forms - 如果在 IE 9 上访问 Gmail 上的表单链接,文件上传不起作用

angular - HttpRequest 和 reportProgress 不起作用或弄乱了我的请求

javascript - 将按钮放在位置为 :relative 的元素的右上角

java - 输入错误的用户名和/或密码后,如何将用户从登录控件重定向到错误页面?

Javascript : Replace Detect a string and replace html in a div after changing color

php - 直接从Google Drive上传到亚马逊S3

javascript - 如何在angularjs中从数据库mysql加载动态记录?

Node.js mailgun 内联/嵌入图像

javascript - Node Express passport (JWT) - 授权后回调