显然,使用私钥/公钥的库(在本例中为@toruslabs/eccrypto)需要密钥的缓冲区参数。
一个简单的解决方案是通过 browserify 使NodeJS 缓冲区在浏览器中可用。在创建 browserify 文件时,您只需要将 NodeJS Buffer 类包含到 window 对象中,如下所示:
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 或您将使用的任何客户端数据库/存储中。