3

Ich habe einige Daten mit AES-GCM unter Verwendung von IE 11 unter Windows 10 verschlüsselt, aber die Entschlüsselung funktioniert nicht. Beispiel Verschlüsselung JS-Code:Entschlüsseln von Daten aus dem Ergebnis einer IE 11-Verschlüsselung mit AES-GCM

let plainText = new Uint8Array([1]); 
let key; 
let keyBuf = window.msCrypto.getRandomValues(new Uint8Array(32)); 
let iv = window.msCrypto.getRandomValues(new Uint8Array(12)); 
let additionalData = window.msCrypto.getRandomValues(new Uint8Array(16)); 
let encResult; 
let importOp = window.msCrypto.subtle.importKey('raw', 
    keyBuf, 
    { name: 'AES-GCM' }, 
    false, 
    ['encrypt', 'decrypt']); 
importOp.oncomplete = function(e) { 
    key = e.target.result; 
    let encryptOp = window.msCrypto.subtle.encrypt({ 
     name: 'AES-GCM', 
     iv: iv, 
     tagLength: 128, 
     additionalData: additionalData 
    }, key, plainText); 
    encryptOp.oncomplete = function (e) { 
     encResult = e.target.result; 
    }; 
}; 

Das resultierende Element (encResult) ein AesGcmEncryptResult, die den verschlüsselten Wert und den Tag in 2 verschiedenen Eigenschaften aufweisen. Wie ich es verstehe, muss ich diese verketten und sie als Chiffretext übergeben zu entschlüsseln, wie in:

let cipherText = new Uint8Array(plainText.length + 16); // tagLength/8 
cipherText.set(new Uint8Array(encResult.ciphertext), 0); 
cipherText.set(new Uint8Array(encResult.tag), plainText.length); 
let decryptOp = window.msCrypto.subtle.decrypt({ 
    name: 'AES-GCM', 
    iv: iv, 
    tagLength: 128, 
    additionalData: additionalData 
}, key, cipherText); 

ich dann onComplete und onerror und onerror Feuer verdrahten. Leider hat das Event-Objekt des IE nichts anderes zu sagen als type = "error".

Es gibt sehr wenig Informationen über das Netz zur Verwendung von AES-GCM in IE 11.

Bitte erzählen Sie mir nicht einen anderen Browser zu verwenden. Das alles funktioniert gut (aber anders) mit Chrome und Firefox. Ich versuche speziell, dies in IE 11 zu arbeiten.

Was vermisse ich?

Antwort

3

Ich fand diese shim, die (vage) zeigt, dass der Tag-Wert in das Algorithmusobjekt geht und der Chiffretext allein in das dritte Argument geht. Z.B.

let decryptOp = window.msCrypto.subtle.decrypt({ 
    name: 'AES-GCM', 
    iv: iv, 
    additionalData: additionalData, 
    tag: new Uint8Array(encResult.tag) 
    }, key, new Uint8Array(encResult.ciphertext)); 

Warum war das so schwer zu finden? Warum gibt es keine Blogbeiträge zu dieser Funktion? Warum sind die Dokumente von MS so kurz?

Verwandte Themen