2

Je suis en train de mettre en œuvre le chiffrement à clé publique JavaScript pour IE11 avec le code suivant:chiffrement à clé publique dans Internet Explorer 11

<script> 
    var data = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); 

    var crypto = window.crypto || window.msCrypto; 
    var cryptoSubtle = crypto.subtle; 

    var genOp = cryptoSubtle.generateKey(
     { 
      name: "RSA-OAEP", 
      modulusLength: 2048, 
      publicExponent: new Uint8Array([0x01, 0x00, 0x01]), 
      hash: { name: "SHA-256" }, 
     }, 
     true, 
     ["encrypt", "decrypt"] 
    ); 

    genOp.onerror = function (e) { 
     console.error(e); 
    }; 

    genOp.oncomplete = function (e) { 
     var key = e.target.result; 
     console.log(key); 
     console.log(key.publicKey); 

     var encOp = cryptoSubtle.encrypt(
      { 
       name: "RSA-OAEP" 
      }, 
      key.publicKey, 
      data 
     ); 

     encOp.onerror = function (e) { 
      console.error(e); 
     }; 

     encOp.oncomplete = function (e) { 
      var encrypted = e.target.result; 
      console.log(new Uint8Array(encrypted)); 
     }; 
    }; 
</script> 

Il génère la paire de clés, mais ne parvient pas à faire le chiffrement avec un événement d'erreur. Code similaire avec une clé symétrique AES fonctionne. Le cryptage de clé publique est-il pris en charge par IE11? Y at-il quelque chose qui ne va pas avec mon code?

+1

En quoi cette question est-elle différente de [this] (http://stackoverflow.com/questions/33043091/public-key-encryption-in-microsoft-edge)? –

+0

@JamesKPolk Celui-ci concerne IE11 et celui-ci concerne Edge. On peut dire qu'ils auraient pu être inclus dans une question, mais il y a aussi la limite de 5 étiquettes et d'autres préoccupations. Je comprends donc que l'OP expérimente en posant des questions distinctes pour chaque navigateur. – sideshowbarker

+0

@JamesKPolk L'API pour IE11 est différente d'Edge. Donc le code est différent. – FengHuang

Répondre

3

J'ai trouvé la cause de ceci. Je dois ajouter le champ de hachage lors de l'appel à l'appel Encrypt:

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

Cela ne correspond pas au Web Cryptography API specification mais il fonctionne.

+0

Si le comportement d'IE n'est pas conforme à la spécification, pensez à déposer un bogue sur IE et à publier un lien vers ce bogue si possible. – sideshowbarker