我一直在查看crypto-js,its encoder与WordArray
相互转换。我查了一下the documentation,找不到关于WordArray
可能是什么的任何解释。
据我所知,JavaScript中甚至没有名为typed array的WordArray
,并且在任何使用该名称的类型化数组上也没有DataView
。
我知道DataView
是什么,但是我不确定在这里是什么意思。
奇怪,我在crypto-js上发现的所有线程(WORD
is in the Visual C++ parlance,WORD
和here)都使用单词here,而没有人真正询问它是什么。
有人真的可以告诉我吗?是here吗?还是普通字节数组(WordArray
或untyped Uint16Array
整数值)的另一个花哨词?
该类在CryptoJS库的Uint8Array
中定义:
Array
放在其中的值放在最高有效位中(我已根据源代码检查过此值)。由于UTF-8编码为8位字节,因此这些字节被分组在最上面的16位中,然后将core.js
设置为值2。]
因此,如果您要使用Latin1 或
UTF-8将值/**
* 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({
编码为十六进制值,则将得到一个具有十六进制值number
的单元素数组。通常(对称)密码算法被指定为对位进行操作。但是,它们通常被优化为可以在32位或64位字上工作,因为在32位或64位计算机(例如i86或x64)上,它们是最佳的。因此,执行任何操作之前,任何语言的库都将在内部转换为单词。
通常,库将其操作定义为使用字节而不是字。从某种意义上说,CryptoJS在字缓冲区上运行,这有点特殊。这是一种逻辑,因为JavaScript并未定义字节数组。它还跳过了一步,否则您将不得不从UTF-8转换为字节,然后在算法规范内再次转换为单词。
CryptoJS还存在一个64位字数组,对于诸如SHA-512之类的针对64位操作进行了优化的算法无疑。