You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法使用Fireblocks生成的RSA密钥创建Hedera测试网客户端求助

问题分析与解决方案

核心问题

Hedera原生不支持将RSA密钥直接作为账户操作密钥使用,它仅支持ED25519或**ECDSA(secp256k1/secp256r1)**算法的密钥对。你用Fireblocks生成的4096位RSA私钥不符合Hedera客户端的密钥格式要求,所以会触发invalid private key length错误。

你的尝试为什么无效

PrivateKey.fromPem()和PrivateKey.fromStringDerPem()方法仅能解析Hedera支持的ED25519/ECDSA密钥的PEM/DER格式,无法处理RSA密钥,因此转换格式也无法解决问题。

正确解决路径

方案1:生成Hedera兼容的密钥(推荐)

在Fireblocks中为你的Hedera账户生成ED25519或ECDSA类型的私钥,而非RSA密钥。Fireblocks支持直接生成符合Hedera要求的密钥对,生成后用以下代码初始化客户端:

const { Client, AccountId, PrivateKey } = require("@hashgraph/sdk");
const fs = require("fs");

async function initHederaClient() {
    // 替换为你的Hedera账户ID
    const operatorIdStr = "0.0.XXXXXX";
    // 读取Fireblocks生成的ED25519/ECDSA私钥PEM文件
    const operatorKeyStr = fs.readFileSync("hedera-private-key.pem", "utf8");

    const operatorId = AccountId.fromString(operatorIdStr);
    const operatorKey = PrivateKey.fromPem(operatorKeyStr);
    
    const client = Client.forTestnet().setOperator(operatorId, operatorKey);
    console.log("客户端初始化成功");
    return client;
}

initHederaClient().catch(console.error);

方案2:通过Fireblocks API处理RSA签名(合规需求场景)

如果因企业合规必须使用RSA密钥,不能直接用RSA密钥初始化Hedera客户端,需通过Fireblocks API完成交易签名:

const { Client, AccountId, TransferTransaction } = require("@hashgraph/sdk");
const axios = require("axios");

async function sendTransactionViaFireblocks() {
    const client = Client.forTestnet();
    const operatorId = AccountId.fromString("0.0.XXXXXX");
    // 仅设置操作账户ID,不直接传入密钥
    client.setOperatorAccountId(operatorId);

    // 创建测试转账交易
    const transaction = await new TransferTransaction()
        .addHbarTransfer(operatorId, -1)
        .addHbarTransfer(AccountId.fromString("0.0.YYYYYY"), 1)
        .freezeWith(client);

    // 获取待签名的交易字节
    const transactionBytes = transaction.toBytes();

    // 调用Fireblocks API签名交易(需配置你的Fireblocks API密钥)
    const fireblocksResponse = await axios.post("https://api.fireblocks.io/v1/transactions", {
        assetId: "HEDERA_TESTNET",
        operation: "RAW",
        note: "Hedera转账交易签名",
        rawMessageData: {
            messages: [
                {
                    content: Buffer.from(transactionBytes).toString("base64")
                }
            ]
        },
        source: {
            type: "VAULT_ACCOUNT",
            id: "你的Fireblocks金库ID"
        }
    }, {
        headers: {
            "X-API-Key": "你的Fireblocks API密钥",
            "Authorization": "Bearer 你的Fireblocks签名"
        }
    });

    // 将Fireblocks返回的签名附加到交易
    const signature = fireblocksResponse.data.signedMessages[0].signature.fullSig;
    transaction.addSignature(operatorId, Buffer.from(signature, "base64"));

    // 提交交易并获取回执
    const response = await transaction.execute(client);
    const receipt = await response.getReceipt(client);
    console.log("交易状态:", receipt.status.toString());
}

sendTransactionViaFireblocks().catch(console.error);

总结

  • 直接用RSA密钥初始化Hedera客户端的方法不正确,Hedera不支持RSA作为操作密钥。
  • 优先选择生成Hedera兼容的ED25519/ECDSA密钥,这是最简便的方案。
  • 若必须使用RSA,需通过Fireblocks API完成交易签名,而非本地解析RSA密钥。

内容的提问来源于stack exchange,提问作者user30219775

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:03:15