比特币地址生成验证
难度目标值:
由系数和指数构成:0x1903A30C
目标值:0x03a30c2(0x08(0x19-0x03))
maven:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.62</version>
</dependency>
public static byte[] generatePrivateKey() {
SecureRandom secureRandom = new SecureRandom();
BigInteger privateKeyCheck = BigInteger.ZERO;
BigInteger maxKey = new BigInteger("00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140",16);
byte[] privateKeyAttempt=new byte[32];
secureRandom.nextBytes(privateKeyAttempt);
privateKeyCheck=new BigInteger(1,privateKeyAttempt);
while (privateKeyCheck.compareTo(BigInteger.ZERO)==0||privateKeyCheck.compareTo(maxKey)==1){
secureRandom.nextBytes(privateKeyAttempt);
privateKeyCheck=new BigInteger(1,privateKeyAttempt);
}
return privateKeyAttempt;
}
public static byte[] generatePublicKey(byte[] privateKey){
ECNamedCurveParameterSpec spec= ECNamedCurveTable.getParameterSpec("secp256k1");
ECPoint pointQ = spec.getG().multiply(new BigInteger(1, privateKey));
return pointQ.getEncoded();
}