我一直在看加密js https://github.com/brix/crypto-js and 它的编码器 https://github.com/brix/crypto-js/blob/develop/docs/QuickStartGuide.wiki#Encoders与 a 之间的转换WordArray
。我抬头文档 https://github.com/brix/crypto-js/blob/develop/docs/QuickStartGuide.wiki并且找不到任何解释WordArray
可能。
据我所知,甚至没有类型数组 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays在 JavaScript 中命名为WordArray
,并且也不存在DataView https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView在任何具有该名称的类型化数组上。
我知道什么是WORD是 Visual C++ 的说法 https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types,但我不确定这在这里意味着什么。
奇怪的是,所有的线程(here https://stackoverflow.com/q/11889329/303685, here https://stackoverflow.com/a/44715282/303685 and here https://gist.github.com/joecliff/10948592)我发现加密js正在使用这个词WordArray
没有人真正询问它是什么。
有人真的可以告诉我吗?是不是一个Uint16Array
?或者只是常规字节数组的另一个奇特词(Uint8Array
or an untyped Array
整数值)?
该类定义于core.js
在 CryptoJS 库中:
/**
* 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 等算法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)