本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

署名

シグネチャを r, s, v 形式と 圧縮文字列 形式の間で変換する。

Web3jとkaiaライブラリから必要なクラスをインポートする(web3j-ext)

{r ,s ,v} の署名を string に変換するには、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

ページを改善してください。