我一直在看 crypto-js 和 its encoder与 WordArray
相互转换。我查了一下the documentation并且找不到关于什么是 WordArray
的任何解释。
据我所知,甚至没有 typed array在名为 WordArray
的 JavaScript 中,也没有 DataView
在任何具有该名称的类型化数组上。
我知道什么是WORD
is in the Visual C++ parlance , 但我不确定这里是什么意思。
奇怪,我在 crypto-js 上发现的所有线程( here 、 here 和 here )都在使用单词 WordArray
而没有人真正询问这是什么。
有人能告诉我吗?它是 Uint16Array
吗?或者只是常规字节数组的另一个奇特词(Uint8Array
或 untyped 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/