2017-02-17 23 views
0

У меня возникла проблема, когда я пытался использовать Crypto API для firefox. (doc) я получаю TypeError, когда я пытаюсь зашифровать четкий текст с помощью этой функции:TypeError при шифровании данных с помощью WebAPI window.crypto.subtle.encrypt()

window.crypto.subtle.encrypt(algo_enc,key,padded_clear_txt); 

(doc)

Это, как я определил мои параметры:

algo_enc:

var iv = new Int32Array(4) ;//4-32 bit integers (128 bits)  
window.crypto.getRandomValues(iv); //defining the IV 
var algo_enc = {"name": "AES-CBC", iv} 

ключ:

var alg_key = {"name":"AES-CBC","length":128}; 
var key = window.crypto.subtle.generateKey(alg_key,false,["encrypt","decrypt"]); 

padded-clear-txt - это 256-битное (2 * 128) сообщение, которое я хочу зашифровать.

Это ошибка, я получаю, когда я выполнить функцию кодирования:

Аргумент 2 из SubtleCrypto.encrypt не реализует интерфейс CryptoKey.

Генерация ключа прошла хорошо, и это объект CryptoKey, но я все еще получаю эту ошибку. Поэтому, возможно, это ошибка, о которой я должен сообщить ...

ответ

1

Функции WebCrypto возвращают обещания. Они не синхронны. Результат получен в обратном вызове. Смотрите эту full example

window.crypto.subtle.generateKey({ name: "AES-CBC", length: 128 }, false, ["encrypt", "decrypt"]) 
.then(function(key){ 
    var iv = window.crypto.getRandomValues(new Uint8Array(16)) 
    window.crypto.subtle.encrypt({ name: "AES-CBC",iv: iv,}, key, dataToEncrypt) 
    .then(function(encrypted){ 
     //returns an ArrayBuffer containing the encrypted data 
    }).catch(function(err){ 
     console.error(err); 
    });  
}).catch(function(err){ 
    console.error(err); 
}); 

Обратите внимание, что webcrypto использует ArrayBuffer для входных и выходных данных

 Смежные вопросы

  • Нет связанных вопросов^_^