6

Windows 10 で IE 11 を使用して AES-GCM で一部のデータを暗号化できましたが、復号化が機能しません。暗号化 JS コードの例:

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;
    };
};

結果の項目 (encResult) は AesGcmEncryptResult であり、暗号化された値とタグが 2 つの異なるプロパティにあります。私が理解しているように、次のように、これらを連結し、復号化する暗号テキストとして渡す必要があります。

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);

次に、oncomplete と onerror と onerror の発火を接続します。残念ながら、IE の Event オブジェクトには、type = "error" 以外に何もわかりません。

IE 11 での AES-GCM の使用に関する Web 上の情報はほとんどありません。

別のブラウザを使用するように言わないでください。これはすべて、Chrome と Firefox で正常に動作します (ただし、動作が異なります)。私は特にこれをIE 11で動作させようとしています。

私は何が欠けていますか?

4

1 に答える 1