2015-12-14 1 views
4

Я пытаюсь сгенерировать открытый ключ из следующих x и y объекта Q в браузере. Проблема заключается в том, чтобы использовать этот открытый ключ для проверки JWT. Мне нужно получить шестнадцатеричный формат ключа. Я использую keypair из src = "bitcoinjs.min.js", который не позволяет мне получить шестнадцатеричную форму открытого ключа. Есть ли библиотека или функция, чтобы преобразовать ее в шестнадцатеричную форму?Преобразование из байт-массива в шестнадцатеричный формат с использованием 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

Если у вас есть поток байтов довольно легко распечатать шестигранной эквив. Сделайте что-нибудь вроде (используя String.fromCharCode) 'var lower = byte & 0x0f; console.log (String.fromCharCode (ниже> 0x09? Ниже + 55: ниже + 48)); var upper = byte >> 4;/* rinse and repeat */' – derekdreery

ответ

0

РАБОТА: Ниже приведен фрагмент рабочего кода, который принимает байтовый массив и выдает шестнадцатеричную строку.

function toHexString(bytes) { 
    return bytes.map(function(byte) { 
    return (byte & 0xFF).toString(16) 
    }).join('') 
} 

Спасибо @derekdreery за вашу помощь :)

1

Ok поэтому я собираюсь расширить на мой комментарий

Предположим: ключ представляет собой массив или итерируемым байтам

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-символьных строк, представляющих шестнадцатеричное значение байтов.

+0

Спасибо, у меня есть массив в форме ' 4, -101,122, -41, -30,23, -28,3, -16,61, -112, -119,44,115 , -76, -121,50, -84,106,88,89,80,9,45, -61, -40, -104, -125,21, -61, -79123, -76, -85, -92 , 62,41, -94,91,64,112, -107106, -38, -37,73,0, -54,60,26, -62,46, -78, -106, -81, -82, - 57,87,50,85,89, -18, -70,75, -1' После использования вышеуказанной функции я просто получаю '04' Является ли это правым байтовым массивом, который ожидается функцией вы предложили – Actung