- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
当使用 CryptoJS.AES.encrypt
时,如果第三个参数没有传递给函数,它如何产生一个初始化向量?有没有办法把它从加密的字符串中取出来?
我需要这个的原因是我需要解密使用 Lua 返回的 CryptoJS.AES.encrypt
内容,但我只有提供的 key 。
最佳答案
CryptoJS' CryptoJS.<BlockCipher>.encrypt
有两种加密模式。
如果您传入的 key 不是字符串,而是 WordArray(CryptoJS 的二进制数据内部表示格式),则该 key 将按原样使用。此模式需要一个 IV 用于除 ECB 之外的所有操作模式,ECB 不使用 IV,因此您不必指定一个。如果没有传递 IV,它将默认(通过一些 JavaScript 魔法)为零填充 IV(由 0x00 字节的完整 block 组成)。
如果您传入一个是字符串的“ key ”,它会假定“ key ”是密码。为了从密码中派生 key ,它使用与 OpenSSL 兼容的派生函数 EVP_BytesToKey
.此模式生成一个新的 8 字节随机盐并将其与密码一起用于生成 key 和 IV。即使您显式传入 IV,它也不会被使用。
CryptoJS.AES.encrypt(msg, password).toString()
生成 Base64 编码的密文,其开头包含字符串“Salted__”,后跟 8 字节盐和实际密文。您可以在使用前明确拆分它:
var ct = CryptoJS.AES.encrypt(msg, password);
var saltHex = ct.salt.toString(); // random salt
var ctHex = ct.ciphertext.toString(); // actual ciphertext
var ivHex = ct.iv.toString(); // generated IV
如果您需要重新创建相同的 key 派生。看看the code和 the specification .
key 应该具有高熵并且与随机噪声无法区分,这使得它们很难被暴力破解。上面提到的EVP_BytesToKey
不安全,因为 MD5 散列非常快,这使攻击者能够暴力破解密码。您要么需要使用非常长的密码(20-30 个字符),要么使用适当的 key 派生函数,例如 CryptoJS 提供的 PBKDF2。
关于javascript - 当没有指定时,CryptoJS 如何获得 IV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35472396/
我正在使用 Gunicorn 为 Django 应用程序提供服务,它工作正常,直到我将其超时时间从 30 秒更改为 900000 秒,我不得不这样做,因为我有一个用例需要上传和处理一个巨大的文件(过程
我有一个带有非常基本的管道的Jenkinsfile,它可以旋转docker容器: pipeline { agent { dockerfile { args '-u root' } } stag
在学习 MEAN 堆栈的过程中,我遇到了一个问题。每当我尝试使用 Passport 验证方法时,它都不会返回任何响应。我总是收到“localhost没有发送任何数据。ERR_EMPTY_RESPONS
在当今的大多数企业堆栈中,数据库是我们存储所有秘密的地方。它是安全屋,是待命室,也是用于存储可能非常私密或极具价值的物品的集散地。对于依赖它的数据库管理员、程序员和DevOps团队来说,保护它免受所
是否可以创建像图片上那样的边框?只需使用 css 边框属性。最终结果将是没 Angular 盒子。我不想添加额外的 html 元素。我只想为每个 li 元素添加 css 边框信息。 假设这是一个 ul
我是一名优秀的程序员,十分优秀!