怎么实现JAVA离线签名
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"怎么实现JAVA离线签名"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!源码impor
千家信息网最后更新 2026年11月02日怎么实现JAVA离线签名
本篇内容介绍了"怎么实现JAVA离线签名"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
源码
import com.alibaba.fastjson.JSON;import com.google.protobuf.Any;import com.google.protobuf.ByteString;import com.google.protobuf.InvalidProtocolBufferException;import java.util.Map;import org.bouncycastle.util.encoders.Hex;import org.tron.common.crypto.ECKey;import org.tron.common.crypto.Sha256Hash;import org.tron.common.utils.ByteArray;import org.tron.core.exception.CancelException;import org.tron.protos.Contract;import org.tron.protos.Protocol.Block;import org.tron.protos.Protocol.Transaction;import org.tron.walletserver.WalletApi;public class TransactionSignDemo { public static Transaction createTransaction(byte[] from, byte[] to, long amount,long blockTimestamp,long blockHeight,byte[] blockHash) { Transaction.Builder transactionBuilder = Transaction.newBuilder(); //Block newestBlock = WalletApi.getBlock(-1); Transaction.Contract.Builder contractBuilder = Transaction.Contract.newBuilder(); Contract.TransferContract.Builder transferContractBuilder = Contract.TransferContract.newBuilder(); transferContractBuilder.setAmount(amount); ByteString bsTo = ByteString.copyFrom(to); ByteString bsOwner = ByteString.copyFrom(from); transferContractBuilder.setToAddress(bsTo); transferContractBuilder.setOwnerAddress(bsOwner); try { Any any = Any.pack(transferContractBuilder.build()); contractBuilder.setParameter(any); } catch (Exception e) { return null; } contractBuilder.setType(Transaction.Contract.ContractType.TransferContract); transactionBuilder.getRawDataBuilder().addContract(contractBuilder).setTimestamp(System.currentTimeMillis()) .setExpiration(blockTimestamp + 10 * 60 * 60 * 1000); Transaction transaction = transactionBuilder.build(); Transaction refTransaction = setReference(transaction, blockHeight,blockHash); return refTransaction; } public static Transaction setReference(Transaction transaction, long blockHeight,byte[] blockHash) { //long blockHeight = newestBlock.getBlockHeader().getRawData().getNumber(); //byte[] blockHash = getBlockHash(newestBlock).getBytes(); byte[] refBlockNum = ByteArray.fromLong(blockHeight); Transaction.raw rawData = transaction.getRawData().toBuilder() .setRefBlockHash(ByteString.copyFrom(ByteArray.subArray(blockHash, 8, 16))) .setRefBlockBytes(ByteString.copyFrom(ByteArray.subArray(refBlockNum, 6, 8))).build(); return transaction.toBuilder().setRawData(rawData).build(); } public static Sha256Hash getBlockHash(Block block) { return Sha256Hash.of(block.getBlockHeader().getRawData().toByteArray()); } public static String getTransactionHash(Transaction transaction) { String txid = ByteArray.toHexString(Sha256Hash.hash(transaction.getRawData().toByteArray())); return txid; } private static byte[] signTransaction2Byte(byte[] transaction, byte[] privateKey) throws InvalidProtocolBufferException { ECKey ecKey = ECKey.fromPrivate(privateKey); Transaction transaction1 = Transaction.parseFrom(transaction); byte[] rawdata = transaction1.getRawData().toByteArray(); byte[] hash = Sha256Hash.hash(rawdata); byte[] sign = ecKey.sign(hash).toByteArray(); return transaction1.toBuilder().addSignature(ByteString.copyFrom(sign)).build().toByteArray(); } public static void main(String[] args) throws InvalidProtocolBufferException, CancelException { String privateStr = "你的私钥"; byte[] privateBytes = ByteArray.fromHexString(privateStr); ECKey ecKey = ECKey.fromPrivate(privateBytes); byte[] from = ecKey.getAddress(); byte[] to = WalletApi.decodeFromBase58Check("地址"); long amount = 100_000_000L; String blockStr = HttpUtil.get("https://apilist.tronscan.org/api/block/latest"); Map blockInfo=JSON.parseObject(blockStr); System.out.println(blockInfo.toString()); Long blockTimestamp = Long.parseLong(blockInfo.get("timestamp").toString()); Long blockHeight = Long.parseLong(blockInfo.get("number").toString()); byte[] blockHash = Hex.decode(blockInfo.get("hash").toString()); //开始看官方demo改写的blockHashd,但是错的,签名没的问题,但是广播就报错TAPOS_ERROR,说块不在链上。 byte[] blockHash3=Sha256Hash.of(blockInfo.get("hash").toString().getBytes()).getBytes(); System.out.println("===blockHash:"+ByteArray.toHexString(blockHash)); System.out.println("===blockHash3:"+ByteArray.toHexString(blockHash3)); Transaction transaction = createTransaction(from, to, amount, blockTimestamp, blockHeight, blockHash); byte[] transactionBytes = transaction.toByteArray(); byte[] transaction4 = signTransaction2Byte(transactionBytes, privateBytes); System.out.println("transaction4 ::::: " + ByteArray.toHexString(transaction4)); //广播的URL:https://apilist.tronscan.org/api/broadcast }} "怎么实现JAVA离线签名"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
内容
更多
知识
广播
实用
学有所成
接下来
困境
地址
官方
实际
情况
文章
案例
源码
编带
网站
行业
过程
问题
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
保险科技 互联网保险
喔噻互联网科技有限公司
深圳市人人互联网科技有限公司
互联网科技与金融科技
互联网金融公司科技
狮子座互联网科技
艾特科技互联网
菲比寻常互联网科技
互联网科技有限公司 翻译
哈尔滨秒房互联网科技有限公司
上海电发互联网科技有限公司
农村开互联网科技讲堂
健康食品互联网创新科技园项目
允成互联网科技有限公司融资
乌鲁木齐新华智原互联网科技学校
滨湖区互联网智能科技产品有哪些
锡山区互联网智能科技产品供应
北京品多多互联网科技有限公司
互联网科技大会大佬
恒生互联网科技趋势
什么是科技互联网
河南真二互联网科技有限公司
鑫亿盛互联网科技
赫美联合互联网科技
国外互联网科技网站
互联网科技股有哪些
世界互联网科技公司市值排名
民营互联网公司国防科技
黑云互联网科技有限公司
盐城市攀科互联网科技有限公司