Javascript 将crypto.minute.deriveKey结果转换为十六进制字符串
根据,我想从javascript中的助记词中获取种子 我使用以下代码: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
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