У меня проблема с использованием PBKDF2 с Webcrypto. Я хотел бы использовать PBKDF2 с алгоритмом SHA-1. В настоящее время у меня есть
const ENCODING = "utf-8";
const HMACSHA1 = {name: "HMAC", "hash" : "SHA-1"};
const PBKDF2SHA1 = {name: "PBKDF2", "hash": "SHA-1"};
// str2binb takes a string and outputs an ArrayBuffer
async function pbkdf2_generate_key_from_string(string) { // Working
return crypto.subtle.importKey(
"raw",
str2binb(string),
PBKDF2SHA1,
false,
["deriveKey", "deriveBits"],
);
}
async function pbkdf2_derive_salted_key(key, salt, iterations) { // Not working
return crypto.subtle.deriveKey(
{
"name": "PBKDF2",
"salt": salt,
"iterations": iterations,
"hash": "SHA-1",
"length": 160
},
key,
{
"name": "HMAC"
"hash": "SHA-1",
"length": 160
},
true,
[ "encrypt", "decrypt"]
);
}
Однако я знаю, что должен использовать его неправильно, потому что это поддерживаемый алгоритм получения ключа и, согласно документации Mozilla fantasti c, под derivedKeyAlgorithm
HMA C поддерживается также как HMA C -SHA1. У меня также он работает с AES-GCM
довольно прямо.
Сообщение об ошибке, которое я получаю, когда я пытаюсь,
salt = b64binb("QSXCR+Q6sek8bf92"); // ArrayBuffer
key = await pbkdf2_generate_key_from_string("pencil");
x = await pbkdf2_derive_salted_key(key, salt, 4096)
это Uncaught DOMException: Cannot create a key using the specified key usages.
Примечание. : Я понимаю, что SHA1 больше не рекомендуется, это для устаревшей поддержки.
Примечание 2: Он работает, когда я заменил указанное выше на,
async function pbkdf2_derive_salted_key(key, data, salt, iterations) { // Not working
return crypto.subtle.deriveKey(
{
"name": "PBKDF2",
salt: salt,
"iterations": iterations,
"hash": "SHA-1",
},
key,
{
"name": "AES-GCM",
"length": 256
},
true,
[ "encrypt", "decrypt"]
);
}
Спасибо.