Мне было очень трудно понять, как хранить Secp256k1 privateKey из нескольких библиотек (в настоящее время на этой для шифрования ECIES: https://npm.io/package/@toruslabs/eccrypto). Я ...

0
user14930609 10 Янв 2021 в 13:38

1 ответ

Лучший ответ

Очевидно, библиотека, которая использует закрытый / открытый ключ (в данном случае это @ toruslabs / eccrypto < / a>) требует параметра буфера для ключей.

Простым решением было бы сделать доступным в браузере NodeJS Buffer через браузер. Вам нужно будет только включить класс NodeJS Buffer в объект окна при создании файла просмотра, как показано:

const eccrypto = require('./index');
window.eccrypto = eccrypto;
window.Buffer = Buffer;

Затем сгенерируйте файл пакета с помощью browserify: browserify main.js -o bundle.js

После этого вы сможете использовать класс Buffer в своем браузере, что сделает возможной загрузку закрытого / открытого ключа. Пример кода здесь:

<script src="bundle.js"></script>
<script>
  const eccrypto = window.eccrypto;

  const privateKey = eccrypto.generatePrivate();
  const publicKey = eccrypto.getPublic(privateKey);

  // hex string output of private key
  const hexPrivateKey = privateKey.toString('hex')
  console.log(hexPrivateKey); // we can do this as privateKey is a Buffer

  // load private key again
  const newPrivateKey = Buffer.from(hexPrivateKey, 'hex');
 
  const enc = new TextEncoder();

  // code referenced from @toruslabs/eccrypto README
  // Encrypting the message.
  eccrypto.encrypt(publicKey, enc.encode("my testing msg")).then(function (encrypted) {
    // Decrypting the message.
    eccrypto.decrypt(newPrivateKey, encrypted).then(function (plaintext) {
      console.log("Message:", plaintext.toString());
    });
  });
</script>

Этого должно быть достаточно для хранения шестнадцатеричной строки закрытого ключа в localStorage или любой клиентской базе данных / хранилище, которое вы будете использовать.

1
willi123yao 10 Янв 2021 в 11:48