2

我一直無法在IE11中找到任何RSA-OAEP加密的例子。ie11中的RSA-OEP加密

這裏是我的實現的一個片段,其中給出了一個非常模糊的錯誤。

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

+1

你是很模糊有關*模糊的錯誤*「來調用加密呼叫時添加哈希場」。它是什麼? –

+0

**錯誤**。如果我深入瞭解對象,那麼我會發現**無法獲取未定義或空引用**消息的屬性「消息」,但我不相信這與此問題有任何關係。如果您在運行上面的代碼片段時沒有在IE11中遇到同樣的問題,請告訴我。 – chimon

回答