基于Web3j的钱包工具类,包括普通钱包的生成和加载,bip39钱包的生成和加载,bip39钱包签名和验证。
相关依赖
org.web3j
core
4.2.0
org.projectlombok
lombok
1.18.12
true
com.alibaba
fastjson
1.2.31
com.fasterxml.jackson.core
jackson-core
2.10.3
org.apache.commons
commons-lang3
3.3.9
org.junit.jupiter
junit-jupiter
5.5.2
安全随机数
import org.web3j.crypto.LinuxSecureRandom;
import java.security.SecureRandom;
/**
* @author ming
* @version 1.0.0
* @date 2020/9/23 16:05
**/
public class SecureRandomUtils {
private static final SecureRandom SECURE_RANDOM;
private static int isAndroid;
public static SecureRandom secureRandom() {
return SECURE_RANDOM;
}
private static boolean isAndroidRuntime() {
if (isAndroid == -1) {
String runtime = System.getProperty("java.runtime.name");
isAndroid = runtime != null && "Android Runtime".equals(runtime) ? 1 : 0;
}
return isAndroid == 1;
}
private SecureRandomUtils() {
}
static {
if (isAndroidRuntime()) {
new LinuxSecureRandom();
}
SECURE_RANDOM = new SecureRandom();
isAndroid = -1;
}
}
钱包工具
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.tld.admin.common.utils.SecureRandomUtils;
import lombok.Data;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.web3j.crypto.*;
import org.web3j.utils.Numeric;
import java.io.File;
import java.io.IOException;
import java.math.BigInteger;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.util.Random;
/**
* 基于web3j的钱包工具类
*
* @author ming
* @version 1.0.0
* @date 2020/9/21 10:30
**/
public class Web3jWalletUtils {
private Logger log = LoggerFactory.getLogger(this.getClass());
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final SecureRandom SECURE_RANDOM = SecureRandomUtils.secureRandom();
static {
// 转换为格式化的json
OBJECT_MAPPER.enable(SerializationFeature.INDENT_OUTPUT);
// 如果json中有新增的字段并且是实体类类中不存在的,不报错
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
public Web3jWalletUtils() {
}
/**
* 创建普通钱包
*
* @param password 钱包密码
* @param walletFilePath 钱包文件存储路径
* @return CommonWallet
* @throws Exception e
*/
public CommonWallet generateCommonWallet(String password, String walletFilePath) throws Exception {
try {
String walletFileName = WalletUtils.generateNewWalletFile(password, new File(walletFilePath), false);
String path = StringUtils.isNotBlank(walletFilePath) && File.separator.equals(walletFilePath.substring(walletFilePath.length() - 1)) ? walletFilePath + walletFileName : walletFilePath + File.separator + walletFileName;
Credentials credentials = WalletUtils.loadCredentials(password, walletFilePath);
String address = credentials.getAddress();
BigInteger publicKey = credentials.getEcKeyPair().getPublicKey();
BigInteger privateKey = credentials.getEcKeyPair().getPrivateKey();
return new CommonWallet(address, password, privateKey, publicKey, path);<