javascript - JavaScript导出RSA-OAEP公钥

原文 标签 javascript rsa webcrypto-api

我正在尝试使用here中所述的导出密钥来访问公共密钥。我有以下代码:



window.crypto.subtle.generateKey(
            {
                name: "RSA-OAEP",
                modulusLength: 2048, //can be 1024, 2048, or 4096
                publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
                hash: {name: "SHA-256"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
            },
            true, //whether the key is extractable (i.e. can be used in exportKey)
            ["encrypt", "decrypt"] //must be ["encrypt", "decrypt"] or ["wrapKey", "unwrapKey"]
        )
            .then(function(key){
                //returns a keypair object
                console.log(key);
                console.log(key.publicKey);
                console.log(key.privateKey);

        window.crypto.subtle.exportKey("spki",key.publicKey)
            .then(function(keydata){
                //returns the exported key data
                console.log(keydata);
                document.getElementById("key").innerHTML = String(key.publicKey)
            })
            .catch(function(err){
                console.error(err);
            });
    })





我想查看公钥,例如,将HTML元素设置为[object CryptoKey],然后将其设置为HTML元素。如何直接访问公钥?

谢谢

编辑:



window.crypto.subtle.generateKey(
            {
                name: "RSA-OAEP",
                modulusLength: 2048, //can be 1024, 2048, or 4096
                publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
                hash: {name: "SHA-256"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
            },
            true, //whether the key is extractable (i.e. can be used in exportKey)
            ["encrypt", "decrypt"] //must be ["encrypt", "decrypt"] or ["wrapKey", "unwrapKey"]
        )
            .then(function(key){
                //returns a keypair object
                console.log(key);
                console.log(key.publicKey);
                console.log(key.privateKey);

                window.crypto.subtle.exportKey("spki",key.publicKey)
                    .then(function(keydata){
                        //returns the exported key data
                        console.log(keydata);
                        var  publicKeyB64 = ab2str(keydata);
                        document.getElementById("key").innerHTML = publicKeyB64;

                    })
                    .catch(function(err){
                        console.error(err);
                    });
            })




        function ab2str( buffer ) {
            var binary = '';
            var bytes = new Uint8Array( buffer );
            var len = bytes.byteLength;
            for (var i = 0; i < len; i++) {
                binary += String.fromCharCode( bytes[ i ] );
            }
            return window.btoa( binary );
        }

最佳答案

keydata是一个ArrayBuffer,其中包含以DER格式导出的公钥。由于DER是二进制的,因此需要将结果编码为文本,例如使用base64

选择您喜欢的函数以将ArrayBuffer从Converting between strings and ArrayBuffers转换为字符串

var  publicKeyB64 = btoa(ab2str(keydata));
document.getElementById("key").innerHTML = publicKeyB64;

关于javascript - JavaScript导出RSA-OAEP公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51001429/

相关文章:

javascript - 如何在javascript中打印具有固定列宽的2D数组?

c++ - RSA解密失败

java - 方法kpg.initialization中的Android空指针异常

java - 无法将 WebCrypto key 对转换为 Java RSA key

javascript - JS:传递的JSON数组丢失引号

javascript - 在 Internet Explorer 中查看 ajax 请求?

javascript - 使用js加密框架或浏览器的Web加密API?

javascript - 将数字转换为ArrayBuffer

javascript - 具有基本身份验证的跨域AJAX?

java - Android NoClassDefFoundError-RSA加密