Шифрование RSA-OEP в ie11

Мне не удалось найти примеры шифрования RSA-OAEP в IE11.

Вот фрагмент моей реализации, в котором я получаю очень расплывчатую ошибку.

function convertStringToArrayBufferView(str) {
      var bytes = new Uint8Array(str.length);
      for (var iii = 0; iii < str.length; iii++) {
        bytes[iii] = str.charCodeAt(iii);
      }

      return bytes;
    }

    
    var crypto = window.crypto || window.msCrypto;
    var config = {
      name: 'RSA-OAEP',
      modulusLength: 2048,
      publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
      hash: {
        name: 'SHA-256'
      }
    };

    var keyOp = crypto.subtle.generateKey(config, false, ['encrypt', 'decrypt']);
    keyOp.onerror = function(e) {
      console.error(e);
    };
    keyOp.oncomplete = function(e) {
      encrypt(e.target.result);
    };

    function encrypt(keypair) {
      var data = "abc1234444"

      var encOp = crypto.subtle.encrypt({
        name: config.name,
        iv: config.iv || crypto.getRandomValues(new Uint8Array(16)),
        key: keypair.publicKey
      }, keypair.publicKey, convertStringToArrayBufferView(data));

      encOp.onerror = function(e) {
        console.error(e);
      };
      encOp.oncomplete = function(e) {
        console.log({
          data: new Uint8Array(e.target.result)
        });
      };
    }

При изменении алгоритма на RSAES-PKCS1-v1_5 все работает без нареканий

    function convertStringToArrayBufferView(str) {
      var bytes = new Uint8Array(str.length);
      for (var iii = 0; iii < str.length; iii++) {
        bytes[iii] = str.charCodeAt(iii);
      }

      return bytes;
    }

    
    var crypto = window.crypto || window.msCrypto;
    var config = {
      name: 'RSAES-PKCS1-v1_5',
      modulusLength: 2048,
      publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
      hash: {
        name: 'SHA-256'
      }
    };

    var keyOp = crypto.subtle.generateKey(config, false, ['encrypt', 'decrypt']);
    keyOp.onerror = function(e) {
      console.error(e);
    };
    keyOp.oncomplete = function(e) {
      encrypt(e.target.result);
    };

    function encrypt(keypair) {
      var data = "abc1234444"

      var encOp = crypto.subtle.encrypt({
        name: config.name,
        iv: config.iv || crypto.getRandomValues(new Uint8Array(16)),
        key: keypair.publicKey
      }, keypair.publicKey, convertStringToArrayBufferView(data));

      encOp.onerror = function(e) {
        console.error(e);
      };
      encOp.oncomplete = function(e) {
        console.log({
          data: new Uint8Array(e.target.result)
        });
      };
    }


person chimon    schedule 30.09.2015    source источник
comment
Вы довольно расплывчато говорите об расплывчатой ​​ошибке. Что это?   -  person Artjom B.    schedule 01.10.2015
comment
Ошибка. Если я копну немного глубже в объект, я найду сообщение Невозможно получить сообщение о свойстве неопределенной или нулевой ссылки, но я не уверен, что это имеет какое-либо отношение к этой проблеме. . Пожалуйста, дайте мне знать, если у вас не будет такой же проблемы в IE11, когда вы запустите приведенный выше фрагмент кода.   -  person chimon    schedule 01.10.2015


Ответы (1)


Эта проблема похожа на шифрование с открытым ключом в Internet Explorer 11.

Там @fenghuang нужно было "добавить хеш-поле при вызове вызова шифрования"

    var encOp = cryptoSubtle.encrypt(
        {
            name: "RSA-OAEP",
            hash: { name: "SHA-256" }
        },
        key.publicKey,
        data
    );
person Kevin Hakanson    schedule 02.01.2016