javascript - 什么是字数组?

标签 javascript cryptography cryptojs

我一直在看 crypto-js its encoderWordArray 相互转换。我查了一下the documentation并且找不到关于什么是 WordArray 的任何解释。

据我所知,甚至没有 typed array在名为 WordArray 的 JavaScript 中,也没有 DataView在任何具有该名称的类型化数组上。

我知道什么是WORD is in the Visual C++ parlance , 但我不确定这里是什么意思。

奇怪,我在 crypto-js 上发现的所有线程( hereherehere )都在使用单词 WordArray 而没有人真正询问这是什么。

有人能告诉我吗?它是 Uint16Array 吗?或者只是常规字节数组的另一个奇特词(Uint8Arrayuntyped Array 整数值)?

最佳答案

该类在 CryptoJS 库的 core.js 中定义:

/**
 * An array of 32-bit words.
 *
 * @property {Array} words The array of 32-bit words.
 * @property {number} sigBytes The number of significant bytes in this word array.
 */
var WordArray = C_lib.WordArray = Base.extend({

放在那里的(字节)值放在单词的最高有效位中(我已经对照源代码检查了这一点)。

例如,如果您将值 “he” 作为 UTF-8(或 Latin1 或 ASCII)放入其中,那么您将得到一个值为 68_65_00_00 在其中,words 设置为值 2。这是因为 UTF-8 编码为 8 位字节,并且这些字节分组在最上面的 16 位中。


通常(对称)加密算法被指定为对位进行操作。但是,它们通常经过优化以在 32 位或 64 位字上工作,因为它们在 32 位或 64 位机器(例如 i86 或 x64)中是最佳的。因此,任何语言的任何库都会在执行操作之前在内部转换为单词。

不过,通常库将它们的操作定义为使用字节而不是单词。 CryptoJS 有点特殊,因为它在单词缓冲区上运行。这是合乎逻辑的,因为 JavaScript 没有定义字节数组。它还会跳过一个步骤,否则您将不得不从 UTF-8 转换为字节,然后在算法实现中再次转换为单词。

CryptoJS 也有一个 64 位字数组,这无疑适用于针对 64 位操作优化的算法,例如 SHA-512。

关于javascript - 什么是字数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58524245/

相关文章:

angularjs - 如何将 CryptoJS 与 Angular 一起使用

Javascript函数可以写入控制台但不返回值

iphone - 关于iphone SDK上的CommonCrypto..它可以生成RSA key 并加密/解密吗?

javascript - 字节数组可以用作 CryptoJS.RC4.encrypt 的 key 吗?

c# - 无法弄清楚为什么 PHP 到 C# .NET 不会对称加密/解密

c# - 如何验证 RSA 公钥?

javascript - 如何将此代码从 golang 转换为 crypto hmac sha256 hex 中的 reactjs

javascript - 插入标签(所见即所得的 JavaScript 编辑器)

javascript - 根据页面子域本地化脚本 URL

javascript - 使用 CSS3 调整大小属性拆分 Pane