Преобразовать UInt8Array в String

Я работаю над приложением, использующим криптовалюту, и у меня возникают проблемы с преобразованием некоторых задействованных данных.

Я использую bitcoinjs-lib для генерации биткойн-адресов. Адреса созданы успешно, и мой объект ответа выглядит следующим образом:

      address: "1Nnn9HpxgykWXxZX5rL3hIH7iikWkQaBSc"
balance: 0
currency: "BTC"
privateKey: Uint8Array(32) [86, 201, 0, 216, 118, 231, 201, 251, 161, 22, 223, 14, 234, 229, 168, 146, 41, 121, 182, 136, 176, 120, 185, 173, 181, 47, 228, 244, 107, 230, 29, 27]
publicKey: Uint8Array(33) [3, 233, 119, 81, 11, 119, 13, 133, 115, 183, 163, 90, 218, 2, 36, 41, 105, 158, 248, 131, 68, 234, 193, 110, 105, 72, 38, 110, 253, 192, 245, 108, 214]
wif: "Kz8QjBvSPjfRVxazJDwGEGwaoGTjRhFGe1MPsiPZRPpKEpidH7Qf"

Я использую IndexedDB для хранения созданных кошельков. Поскольку я генерирую разные типы кошельков, мой вызов базы данных выглядит так:

      {
 date: new Date(),
 coinType: crypto,
 isHDWallet: true,
 derivationPath: null,
 publicKey: bytesToString(Buffer.from(wallet.publicKey)) ?? null,
 privateKey: bytesToString(Buffer.from(wallet.privateKey)) ?? null,
 wif: wallet.wif ?? null,
 address: wallet.address ?? null,
 balance: wallet.balance ?? null,
 secret: wallet.secret ?? null,
 user_id: 1
}

Мои данные прекрасно хранятся в моей базе данных, за исключением того, что я не могу правильно перевести UInt8Array в строку. Я пробовал почти все из этого поста , но безуспешно.

Здесь bytesToString функция, которую я пробовал:

      function bytesToString (bytes) {
        return String.fromCharCode.apply(null, bytes)
      }

Я пробовал использовать Node's StringDecoderмодуль безуспешно. Я также пробовал использовать Buffer.from(privateKey).toString('utf-8').

Я читал, что биткойн-адреса используют кодировку base 58. Не знаю, актуально это или нет.

У меня нет опыта использования буферов или подобных преобразований. Любая помощь будет принята с благодарностью.

2 ответа

Решение

Это не текст в кодировке UTF-8, а просто двоичные данные. Таким образом, вы можете забыть о связанных вопросах и ответах, вы находитесь в другой ситуации.

Здесь весь ваш выбор относительно того, как вы его закодируете, некоторые предпочтут преобразовать его в шестнадцатеричный дамп

некоторые могут предпочесть хранить двоичные данные напрямую как TINYBLOB, хотя я действительно не эксперт в обслуживании БД.

Это просто двоичные данные. Если вы хотите преобразовать его в строку. Предлагаю вам использовать Base64. Вы можете использовать стороннюю библиотеку: https://github.com/dankogai/js-base64 .

      Base64.fromUint8Array(arr);
Другие вопросы по тегам