Класс определен в 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-битный массив слов, несомненно, для таких алгоритмов, каккак SHA-512, оптимизированные для 64-битной работы.