跳至主要内容
本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)

Signature

r, s, v 和 "压缩字符串"格式之间转换签名。

从 Web3j 和 kaia 库(web3j-ext)导入必要的类

要将 {r ,s ,v} 签名转换为 字符串',请根据参数 r, s ,v 创建一个 Sign.SignatureData对象。 使用Numeric.hexStringToByteArray` 将字符串转换为字节数组

要将Sign.SignatureData压缩为压缩签名字符串,请使用KaiaSignatureData.getSignatureString,并将签名对象作为参数

将字符串签名转换为{r ,s ,v},首先将字符串签名转换为字节数组。 使用 Numeric.hexStringToByteArray 将字符串转换为字节数组

从字节数组中提取 r, s, v 成分。 R是前 32 个索引,S是后 32 个索引,V是最后一个索引

您可以使用 Numeric.toHexString 将每个组件从 "字节数组 "转换为 "字符串"。

SignatureUtilsExample.java

package org.web3j.example.utils;
import org.web3j.crypto.KaiaSignatureData;
import org.web3j.crypto.Sign;
import org.web3j.utils.Numeric;
public class SignatureUtilsExample {
public static void main(String[] args) {
// convert from {r, s, v} signature to string
byte[] r = Numeric.hexStringToByteArray("0xbaabb5a43a047e75e41a77b88fa7a5bf89e5227f1c8e40bfdfbcceb8164521ed");
byte[] s = Numeric.hexStringToByteArray("0x678f3a7b600169b800828065cda112aa28291311a5dbb729480444a2b905f6e6");
byte[] v = Numeric.hexStringToByteArray("0x0");
Sign.SignatureData obj = new Sign.SignatureData(v, r, s);
String signature = KaiaSignatureData.getSignatureString(obj);
System.out.println("From {r, s, v} to string " + signature);
// convert from signature string to {r, s, v}
byte[] signatureBytes = Numeric.hexStringToByteArray("0xbaabb5a43a047e75e41a77b88fa7a5bf89e5227f1c8e40bfdfbcceb8164521ed678f3a7b600169b800828065cda112aa28291311a5dbb729480444a2b905f6e600");
byte[] convertedR = new byte[32];
byte[] convertedS = new byte[32];
byte[] convertedV= new byte[1];
// r is the first 32 bytes
System.arraycopy(signatureBytes, 0, convertedR, 0, 32);
// s is the next 32 bytes
System.arraycopy(signatureBytes, 32, convertedS, 0, 32);
// v is the last byte
convertedV[0] = signatureBytes[64];
System.out.println("Converted R " + Numeric.toHexString(convertedR));
System.out.println("Converted S " + Numeric.toHexString(convertedS));
System.out.println("Converted V " + Numeric.toHexString(convertedV));
}
}

output

❯ java SignatureUtilsExample.java
0xbaabb5a43a047e75e41a77b88fa7a5bf89e5227f1c8e40bfdfbcceb8164521ed678f3a7b600169b800828065cda112aa28291311a5dbb729480444a2b905f6e600

让这个页面变得更好