【问题标题】:How to convert private key to base64 format?如何将私钥转换为base64格式?
【发布时间】:2021-08-22 07:28:15
【问题描述】:

我有一个格式如下的私钥。私钥仅用于测试。 xprvA3bdZ5Dz3QFmyC6Y7tKeJahknnUZPgpw2Zhf7LNmZ1uLfJo2b557DpPBeBVW6Etbggpnd6VRUEWvKUj3NnBuU1MeWH8CY7eVTQ2yvZUXYSq

这很可能是以太坊格式。我需要将其转换为 base64 格式,以便在签名中使用它。 (filecoin交易需要base64编码格式的私钥)

发送 Filecoin 交易我需要使用这个方法:

transactionSignLotus(unSignedMessage, privatekey)

## transactionSignLotus (support Lotus schema)

Sign a transaction and return a JSON string of the signed transaction which can then be sent to a lotus node.

Arguments:

* **transaction**: a filecoin transaction;
* **privatekey**: a private key (hexstring or buffer);

我的私钥不适用于此方法。我想我需要转换成base64,但是我用了大部分的方式将私钥转换成base64格式,都没有得到结果。

注意:当我说 base64 时,我的意思是这样的:

px2g1zwEd1+EMfj4nX1oh0roouBGHhPo7QUNkPBHk1Q=

【问题讨论】:

  • 你能解释一下“以太坊格式”是什么意思吗?
  • transactionSignLotus 需要这种格式 * privatekey:私钥(十六进制字符串或缓冲区);
  • @veedata 私钥由 ethereun 生成
  • @Topaco 密钥应该是 * privatekey:私钥(十六进制字符串或缓冲区);
  • 实际上这是a Bitcoin format 由以太坊@Topaco 共享:它使用base58check——base58 和4 字节截断散列,用于在编码前添加冗余并在解码后删除。 (比特币的 base58check 还包括对前导零的调整,但 xprv 和 xpub 值没有前导零,因此可以忽略。)以太坊和比特币中的地址都是从公钥而不是私钥派生的。

标签: python node.js reactjs cryptography base64


【解决方案1】:
$ cat 68879302.js
let bip32 = require('bitcoinjs-lib').bip32
let x = bip32.fromBase58('xprvA3bdZ5Dz3QFmyC6Y7tKeJahknnUZPgpw2Zhf7LNmZ1uLfJo2b557DpPBeBVW6Etbggpnd6VRUEWvKUj3NnBuU1MeWH8CY7eVTQ2yvZUXYSq')
console.log(x.__D)
$ node 68879302.js
<Buffer cf 8c f7 64 cb d5 6b 5c 40 fa d6 7c 40 9d 52 2e c1 17 e4 93 16 dd 03 ec ec c4 1f 6c 80 6c ee d4>

【讨论】:

    【解决方案2】:
    import base64
    
    key = b'xprvA3bdZ5Dz3QFmyC6Y7tKeJahknnUZPgpw2Zhf7LNmZ1uLfJo2b557DpPBeBVW6Etbggpnd6VRUEWvKUj3NnBuU1MeWH8CY7eVTQ2yvZUXYSq'
    
    b64 = base64.b64encode(key)
    
    print(b64)
    
    # got b'eHBydkEzYmRaNUR6M1FGbXlDNlk3dEtlSmFoa25uVVpQZ3B3MlpoZjdMTm1aMXVMZkpvMmI1NTdEcFBCZUJWVzZFdGJnZ3BuZDZWUlVFV3ZLVWozTm5CdVUxTWVXSDhDWTdlVlRRMnl2WlVYWVNx'
    

    有帮助吗?

    【讨论】:

    • 我需要这样的格式 px2g1zwEd1+EMfj4nX1oh0roouBGHhPo7QUNkPBHk1Q=
    • 应该是:* privatekey:私钥(十六进制字符串或缓冲区);
    • 试试这个:b'heresyourkey'.hex()
    • 什么是b?因为我使用的是nodejs,它会导致错误。
    • 它将字符串转换为字节。
    【解决方案3】:

    假设您将 *nix 与 bash 工具一起使用: $> echo -n “* 私钥:PUT-YOUR-HEX-HERE” | base64 -w 0

    【讨论】:

    • 我需要以编程方式执行此操作
    • 你能分两步做吗:(1)如上所示创建base64字符串(2)硬编码到js代码中的任何var并测试请求响应。如果成功 - 使用 base64encoder 对 js 中的字符串进行编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2019-06-21
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多