比特币WIF格式私钥生成地址-java版

私钥的格式

私钥可以以许多不同的格式表示,所有这些都对应于相同的256位的数字。表4-2展示了私钥的三种常见格式。

     表4-2 私钥表示法(编码格式)

种类 版本 描述
Hex None 64 hexadecimal digits
WIF 5 Base58Check encoding: Base58 with version prefix of 128 and 32-bit checksum
WIF-compressed K or L As above, with added suffix 0x01 before encoding

表4-3 示例:同样的私钥,不同的格式

格式 私钥
Hex 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD
WIF 5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn
WIF-compressed KxFC1jmwwCoACiCAWZ3eXa96mBM6tb3TYzGmf6YwgdGWZgawvrtJ

这些表示法都是用来表示相同的数字、相同的私钥的不同方法。虽然编码后的字符串看起来不同,但不同的格式彼此之间可以很容易地相互转换。

 

今天主要写一写关于WIF-compressed格式的私钥如何生成地址

压缩格式私钥有K和L开头,比如:

KxFC1jmwwCoACiCAWZ3eXa96mBM6tb3TYzGmf6YwgdGWZgawvrtJ

L273HNzNDcU4WHkSqVEv8sRie3HdAAxkWzwgrNLNaCPcgKMW55Lu

 

 

L273HNzNDcU4WHkSqVEv8sRie3HdAAxkWzwgrNLNaCPcgKMW55Lu
8091C15C5D6E3E3671E51A35DC09F48786FC27DA47C1A0478CAC17F3BD9B6870F00108CB3A02
^ ^                                                               ^ ^  
| |                                                               | |  
| Private key (raw hex)                                           | Checksum  
Version                                                           "Compress" flag

 

import org.apache.commons.codec.binary.Hex;
import org.bitcoinj.core.Address;
import org.bitcoinj.core.Base58;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.params.MainNetParams;

		try {
			byte[] wif = Base58.decode("L273HNzNDcU4WHkSqVEv8sRie3HdAAxkWzwgrNLNaCPcgKMW55Lu");
			NetworkParameters params = MainNetParams.get();
			String hexWif = Hex.encodeHexString(wif);
            log.info(hexWif);
			Integer length = hexWif.length();
			String privateKey = hexWif.substring(2, length - 10);//主要是去除前两位和后10位
			ECKey eckey = null;
			eckey = ECKey.fromPrivate(Hex.decodeHex(privateKey));
			log.info("地址为{}",eckey.toAddress(params).toBase58());
			
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e.getMessage());
		}
		

 

 

 

你可能感兴趣的:(比特币WIF格式私钥生成地址-java版)