如何对r_hash进行编码以通过LND REST API校验支付发票
两个r_hash没有不一致,只是同一个32字节原始哈希值的不同编码形式:
- 命令行CLI返回的是十六进制(HEX)编码字符串,每个原始字节对应2个十六进制字符
- HTTP API返回的是标准Base64编码字符串,直接对32字节原始值做Base64编码
按照如下方法即可实现两种格式的双向转换:
Base64(API返回值)转HEX(CLI返回值)
Shell命令实现
echo -n "ud8NgqDTgCUri3sqb8D85YaRsnCtnQzY56iLwGWUXA4=" | base64 -d | xxd -p -c 32
执行后输出即为CLI查询得到的b9df0d82a0d380252b8b7b2a6fc0fce58691b270ad9d0cd8e7a88bc065945c0e。
Python实现
import base64 import binascii base64_hash = "ud8NgqDTgCUri3sqb8D85YaRsnCtnQzY56iLwGWUXA4=" hex_hash = binascii.hexlify(base64.b64decode(base64_hash)).decode() print(hex_hash)
HEX(CLI返回值)转Base64(API调用所需格式)
如果需要用CLI拿到的HEX格式r_hash调用LND HTTP API,需先转成标准Base64格式:
Shell命令实现
echo -n "b9df0d82a0d380252b8b7b2a6fc0fce58691b270ad9d0cd8e7a88bc065945c0e" | xxd -r -p | base64 -w 0
执行后输出即为API兼容的Base64格式ud8NgqDTgCUri3sqb8D85YaRsnCtnQzY56iLwGWUXA4=。
Python实现
import base64 import binascii hex_hash = "b9df0d82a0d380252b8b7b2a6fc0fce58691b270ad9d0cd8e7a88bc065945c0e" base64_hash = base64.b64encode(binascii.unhexlify(hex_hash)).decode() print(base64_hash)
注意事项
部分LND API端点要求传入URL安全的Base64格式,若使用标准Base64报错,可做如下替换:
- 把
+替换为- - 把
/替换为_ - 去掉末尾的
=补位字符
内容的提问来源于stack exchange,提问作者jstaab
相关产品推荐
相关产品推荐

