1、需要导入web3链接钱包
2、需要链接钱包,前面文章里面有
//生成随机签名码(自定义)
var str = web3.utils.sha3("Some string to be hashed");
function signature() {
//调取签名并打印
web3.eth.personal.sign(str,wordAddress).then(function (accounts) {
alert(accounts);
})
}
下面是java校验签名代码
public final class EcRecoverUtil {
public static List ecRecover(String message, String signature) {
if (message == null || signature == null || signature.isEmpty()) {
return Collections.emptyList();
}
String newMessage = "u0019Ethereum Signed Message:n" + message.length() + message;
byte[] msgHash = Hash.sha3(newMessage.getBytes());
byte[] signatureBytes = Numeric.hexStringToByteArray(signature);
if (signatureBytes.length <= 64) {
return Collections.emptyList();
}
byte v = signatureBytes[64];
if (v < 27) {
v += 27;
}
Sign.SignatureData sd =
new Sign.SignatureData(v,
Arrays.copyOfRange(signatureBytes, 0, 32),
Arrays.copyOfRange(signatureBytes, 32, 64));
List result = new ArrayList<>();
// Iterate for each possible key to recover
for (int i = 0; i < 4; i++) {
BigInteger publicKey =
Sign.recoverFromSignature((byte) i,
new ECDSASignature(new BigInteger(1, sd.getR()), new BigInteger(1, sd.getS())),
msgHash);
if (publicKey != null) {
result.add("0x" + Keys.getAddress(publicKey));
}
}
return result;
}
public static boolean checkEcRecover(String message, String signature, String address) {
if (address == null) {
return false;
}
List result = ecRecover(message, signature);
return result.stream().anyMatch(address::equalsIgnoreCase);
}
}
依赖
org.web3j core5.0.0 com.squareup.okhttp3 okhttp4.9.0



