我试图在浏览器中从对象Q的以下x和y生成公钥。问题是为了使用这个公钥来验证JWT,我必须得到密钥的十六进制格式。我使用src =" bitcoinjs.min.js"中的密钥对。这不允许我检索十六进制形式的公钥。 是否有任何库或函数将其转换为十六进制形式?
// Taking reference from http://procbits.com/2013/08/27/generating-a-bitcoin-address-with-javascript
var pubX = hdnode.keyPair.Q.x.toByteArrayUnsigned();
var pubY = hdnode.keyPair.Q.y.toByteArrayUnsigned();
var publicKeyBytes = pubX.concat(pubY);
publicKeyBytes.unshift(0x04);
同时我试过
<script src="http://peterolson.github.com/BigInteger.js/BigInteger.min.js"></script>
var publicKeyInt = BigInt.fromByteArrayUnsigned(publicKeyBytes);
但它没有用 在此先感谢
答案 0 :(得分:1)
好的,我将扩展我的评论
假设:key是一个数组或一个可迭代的字节
function getHexArray(key) {
function num2hex(num) {
return num > 9 ? num + 55 : num + 48;
}
var hex_key = [];
var lower, upper;
for (var i = 0; i < key.length; i++) {
lower = key[i] & 0x0f;
upper = key[i] >> 4;
return String.fromCharCode(num2hex(upper)) +
String.fromCharCode(num2hex(lower));
}
return hex_key;
}
请注意,如果你想要一个长的十六进制字符串,你可能想要颠倒低位和高位的顺序(这是为了写成十六进制字节数组)
此函数允许您输入一个字节数组,并输出一个2-char字符串数组,表示字节的十六进制值。
答案 1 :(得分:0)
WORKING: 下面是一段工作代码,它采用一个字节数组并给出一个十六进制字符串。
function toHexString(bytes) {
return bytes.map(function(byte) {
return (byte & 0xFF).toString(16)
}).join('')
}
感谢@derekdreery的帮助:)