一、地址及私钥生成步骤
1、随机生成256位私钥
2、利用椭圆曲线加密算法生成公钥
3、将公钥前加入0x04值后,进行20位的blake2b计算
4、将得到的blake2哈希值前添加0x01后,继续用blake2b算法计算4位校验和。
5、将20位公钥哈希值和4位校验和连接起来,并用遵照RFC4648标准的Base32编码格式进行编码。
6、将编码后的字符串根据地址属性,属于测试网(t),还是正式网(f),是钱包地址(1)还是合约地址(2)加上相应的前缀。得到最终地址
二、blake2b算法详解
a)在Filecoin区块链中 blake2b 使用在以下一些地方:
1、blake2b-256 :IPLD,用于区块和消息
2、blake2b-4 :用于校验
3、black2b-160:用于取代RIPEMD-160来生成 secp256k1 地址
b)blake2b算法
Blake2是一个强调快速、安全与简单的Hash算法,并且目前被用来替代MD5和SHA1。因为它可以在不耗费更多资源的情况下提供更好的安全性
常见的哈希算法有 MD5, SHA-1, SHA-2, SHA-3。
BLAKE2 系列比常见的 MD5,SHA-1,SHA-2,SHA-3 更快,同时提供不低于 SHA-3 的安全性。 BLAKE2的定位是目前安全系数最高的哈希函数。
BLAKE2是基于BLAKE实现的,BLAKE2有两大主要版本:BLAKE2b和BLAKE2s。BLAKE2b是BLAKE的64位版本,它可以生成最高512位的任意长度哈希。BLAKE2s是BLAKE的32位版本,它可以生成最高256位的任意长度哈希。BLAKE2x是对BLAKE2的简单扩展,它可以生成任意长度的哈希值(长度不受限制)
三、代码实现
public static WalletAddress createWallet(){
ECKey ecKey = new ECKey();
//返回包含私钥的32字节数组
byte[] privKeyBytes = ecKey.getPrivKeyBytes();
//获取编码的公钥值。
byte[] pubKey = ecKey.getPubKey();
if (privKeyBytes == null || privKeyBytes.length < 1) {
System.out.println("密钥生成失败");
}
String filAddress = byteToAddress(pubKey);
String privateKey = HexUtil.encodeHexStr(privKeyBytes);
return new WalletAddress(privateKey,filAddress);
}
private static String byteToAddress(byte[] pub) {
Blake2b.Digest digest = Blake2b.Digest.newInstance(20);
String hash = HexUtil.encodeHexStr(digest.digest(pub));
//将得到的blake2哈希值前添加0x01
String pubKeyHash = "01" + HexUtil.encodeHexStr(digest.digest(pub));
//用blake2b算法计算4位校验和
Blake2b.Digest blake2b3 = Blake2b.Digest.newInstance(4);
String checksum = HexUtil.encodeHexStr(blake2b3.digest(HexUtil.decodeHex(pubKeyHash)));
//Base32编码
return "f1" + Base32.encode(HexUtil.decodeHex(hash + checksum)).toLowerCase();
}
public static void main(String... args) {
WalletAddress walletAddress = createWallet();
System.out.println("地址="+walletAddress.getAddress());
System.out.println("私钥="+walletAddress.getPrivateKey());
}
代码运行结果:
钱包充提系统
学如逆水行舟,不进则退。心似平原跑马,易放难收。【区块链】【系统/网络/运维】【云计算/大数据】【数据库】【移动开发】【后端开发】【游戏开发】【UI设计】【微服务】【爬虫】【Java】【Go】【C++】【PHP】【Python】【Android/IOS】【HTML/CSS】【JavaScript】【Node】【VUE】【ReactNaive】。。。
欢迎各位大神萌新一起专研分享各行各业技术!
Chain区块链开发社区:593674370