Согласно doc простой пример получения пароля с использованием PBKDF2 -
return window.crypto.subtle.importKey(
'raw',
encoder.encode(password),
{name: 'PBKDF2'},
false,
['deriveBits', 'deriveKey']
).then(function(key) {
return window.crypto.subtle.deriveKey(
{ "name": 'PBKDF2',
"salt": encoder.encode(salt),
"iterations": iterations,
"hash": 'SHA-256'
},
key,
{ "name": 'AES-CTR', "length": 128 }, //api requires this to be set
true, //extractable
[ "encrypt", "decrypt" ] //allowed functions
)
}).then(function (webKey) {
return crypto.subtle.exportKey("raw", webKey);
})
. Как видно, API позволяет выбирать:
- функция получения ключа (и ее основной хеш)
- соль
- итерации
- материал необработанного ключа (т. е. пароль)
Однако до сих поркак я вижу, вариантов выбора длины нет. кажется , что параметр набора шифров { "name": 'AES-CTR', "length": 128 }
влияет на длину выхода, но вы можете выбрать только 16 и 32 байта.
Например, с 10 000 раундов, соль: «соль», пароль: «ключевой материал» со 128 это приведет к следующим 16 байтам:
26629f0e2b7b14ed4b84daa8071c648c
, тогда как с { "name": 'AES-CTR', "length": 256 }
вы получите
26629f0e2b7b14ed4b84daa8071c648c648d2cce067f93e2c5bde0c620030521
Как мне установить длину выхода отдельноот 16 или 32 байта?Должен ли я урезать это сам?