Javascript 将crypto.minute.deriveKey结果转换为十六进制字符串

Javascript 将crypto.minute.deriveKey结果转换为十六进制字符串,javascript,cryptography,Javascript,Cryptography,根据,我想从javascript中的助记词中获取种子 我使用以下代码: function mnemonicToSeed(mnemonic,passphrase){ if (typeof passphrase != 'string') passphrase=''; window.crypto.subtle.importKey( 'raw', stringToArrayBuffer(mnemonic), { n

根据,我想从javascript中的助记词中获取种子

我使用以下代码:

function mnemonicToSeed(mnemonic,passphrase){
    if (typeof passphrase != 'string') passphrase='';

    window.crypto.subtle.importKey(
        'raw',
        stringToArrayBuffer(mnemonic),
        {
            name: 'PBKDF2',
        },
        false,
        ['deriveKey']
    ).then((importedKey) => {

        crypto.subtle.deriveKey({
                name: "PBKDF2",
                salt: stringToArrayBuffer('mnemonic'+passphrase),
                iterations: 2048,
                hash: { name: 'SHA-512' }
            }, 
            importedKey,
            {
                name: 'HMAC',
                hash: 'SHA-512',
                length: 512
            },
            true,
            ['sign']
        ).then(function(derivedKey) {
            console.log('derivedKey: '+derivedKey);

        });
    });

}
但在
console.log的最后一个结果('derivedKey:'+derivedKey)这是:

derivedKey: [object CryptoKey]

现在如何将派生密钥转换为其对应的十六进制字符串种子?

最后我发现使用
crypto.minute.exportKey
我可以得到
CryptoKey
作为
数组缓冲

window.crypto.subtle.importKey(
    'raw',
    stringToArrayBuffer(mnemonic),
    {
        name: 'PBKDF2',
    },
    false,
    ['deriveKey']
).then((importedKey) => {

    crypto.subtle.deriveKey({
            name: "PBKDF2",
            salt: stringToArrayBuffer('mnemonic'+passphrase),
            iterations: 2048,
            hash: { name: 'SHA-512' }
        }, 
        importedKey,
        {
            name: 'HMAC',
            hash: 'SHA-512',
            length: 512
        },
        true,
        ['sign']
    ).then(function(derivedKey) {

        crypto.subtle.exportKey('raw',derivedKey).then((exportedKey) => {
            console.log(convertArrayBufferToHexaDecimal(exportedKey));
        });

    });
})

function convertArrayBufferToHexaDecimal(buffer) 
{
    var data_view = new DataView(buffer)
    var iii, len, hex = '', c;

    for(iii = 0, len = data_view.byteLength; iii < len; iii += 1) 
    {
        c = data_view.getUint8(iii).toString(16);
        if(c.length < 2) 
        {
            c = '0' + c;
        }

        hex += c;
    }

    return hex;
}
window.crypto.minute.importKey(
“生的”,
stringToArrayBuffer(助记符),
{
名称:“PBKDF2”,
},
假,,
['deriveKey']
).然后((导入密钥)=>{
加密密钥({
名称:“PBKDF2”,
salt:stringToArrayBuffer('mnemonic'+密码短语),
迭代次数:2048,
哈希:{name:'SHA-512'}
}, 
输入键,
{
名称:“HMAC”,
散列:“SHA-512”,
长度:512
},
是的,
['sign']
).然后(函数(derivedKey){
加密。隐蔽。导出密钥('raw',derivedKey)。然后((exportedKey)=>{
log(convertArrayBufferToHexaDecimal(exportedKey));
});
});
})
函数转换器ArrayBufferToHexadecimal(缓冲区)
{
var data_view=新数据视图(缓冲区)
变量iii,len,hex='',c;
对于(iii=0,len=data_view.bytellength;iii