1、钱包设计
package com.blockchain.model; import java.util.Map; import
com.blockchain.security.CryptoUtil;import com.blockchain.security.RSACoder; /**
* 钱包:公钥、私钥、钱包地址 */ public class Wallet { /** * 公钥 */ private String publicKey;
/** * 私钥 */ private String privateKey; /** * 钱包地址 */ private String address=null
;/** * 隐藏无参构造器 */ private Wallet() {} /** * 只包含公钥的钱包,用来给其他节点使用,其他节点在转账时需要用到 *
@param publicKey */ public Wallet(String publicKey) { this.publicKey =
publicKey;this.address= CryptoUtil.md5(hashPubKey(publicKey)); } /** *
该构造器仅供静态方法createWallet()使用 * @param publicKey * @param privateKey */ private
Wallet(String publicKey, String privateKey) { this.publicKey = publicKey; this
.privateKey = privateKey;this.address= CryptoUtil.md5(hashPubKey(publicKey)); }
/** * 生成一个新钱包,也就是生成新的密钥对 * @return */ public static Wallet createWallet() {
Map<String, Object> initKey;try { // 本地生成公私钥对 initKey = RSACoder.initKey();
String publicKey = RSACoder.getPublicKey(initKey); String privateKey =
RSACoder.getPrivateKey(initKey);return new Wallet(publicKey, privateKey); }
catch (Exception e) { e.printStackTrace(); } return null; } public void
setAddress(String address) { this.address = address; } /** * 获取钱包地址:由公钥生成钱包地址 *
@return */ public String getAddress() { //单例模式,不需要重复计算地址 if(null==address){
String publicKeyHash = hashPubKey(publicKey);return
CryptoUtil.md5(publicKeyHash); }else{ return address; } } /** *
静态方法:根据指定钱包公钥生成钱包地址 * @param publicKey * @return */ public static String
getAddress(String publicKey) { String publicKeyHash = hashPubKey(publicKey);
return CryptoUtil.md5(publicKeyHash); } public String getPublicKey() { return
publicKey; }public void setPublicKey(String publicKey) { this.publicKey =
publicKey; }public String getPrivateKey() { return privateKey; } public void
setPrivateKey(String privateKey) { this.privateKey = privateKey; } /** *
获取钱包公钥hash * * @return */ public String getHashPubKey() { return
CryptoUtil.sha256(publicKey); }/** * 生成钱包公钥hash * * @param publicKey * @return
*/ public static String hashPubKey(String publicKey) { return
CryptoUtil.sha256(publicKey); } }
2、测试代码
package com.blockchian.model; import org.junit.Before; import org.junit.Test;
importcom.blockchain.model.Wallet; public class WalletTest { @Before public
void setUp() throws Exception { } @Test public void testWallet() throws
Exception { Wallet wallet=Wallet.createWallet(); System.out.println("钱包地址:\n"
+wallet.getAddress()); System.out.println("钱包公钥:\n"+wallet.getPublicKey());
System.out.println("钱包私钥:\n"+wallet.getPrivateKey()); } }
测试结果
钱包地址: a2e2b8849c1d874d14884e914a8a0c20 钱包公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCA0ojSpUpztE4RzvzcYJYnLjYR5XHVkwxdAWeY
bYsZqaEJDLVDDGcaS0LCfVACbvswfHikm8XBML0umVTCAof6gHToAqrNziOuAzjP3Quu25iD13er
wOgoxT7DTNF99GZaFo2dgOS+IYFwqlyZ6yW9QKbAUm1a3PyGI6ZqxFjedwIDAQAB 钱包私钥:
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIDSiNKlSnO0ThHO/NxglicuNhHlcd
WTDF0BZ5htixmpoQkMtUMMZxpLQsJ9UAJu+zB8eKSbxcEwvS6ZVMICh/qAdOgCqs3OI64DOM/d
C67bmIPXd6vA6CjFPsNM0X30ZloWjZ2A5L4hgXCqXJnrJb1ApsBSbVrc/IYjpmrEWN53AgMBAAEC
gYBB1dbQ+GJdUXdYiJUXt1Dlgytk6ALOKJF38qDT+J/PJK7E5ja4pl0GxhG/PbWnGLrM47/wOB/P
hK4aY4g6gnqlIgx8L4gGlXtoGtOIuHC8tm+JAff2/puXZl7AGGBJggS2Z7WiUjcKoTxxj86Youc9
Ur7P8dH4b7hU/raMqmS96QJBANTa9Sv/ps/SEubFdy6UYSbWUxVH3Ff7DooiUmEuycMY9LM4XfAs
mxbR+oKOa/FePWVMVh55wwFP1STigZbrNLsCQQCa7x34Vgjf5e3Te14nhL1MWRU1OkRB8rR7f3My
fKIPZQLI+2xHwLLbjE2ydn+3yYfl1sCRgduM4XK/QJBgg391AkEA0YKPjfY+QBJ7blBxJhUAp1SQ
RMMNvD+uKQLtaSC/kVwwB3P06qFNKiIWXIlI8DQdZGbF4YtiCRmGJ58XhPAQXwJANN/yHHRQJwkz
Nv9dTKNSbyHfyQCPluobiiIe0FYUgKh6YNjdRUeQQrkJMySZxcEzbc7yfTYSFWxDWt3P6AA4mQJB
AK+Av4QFUhkGu/cOJPmKgPSn8OPEX9UKNxxnHv0Pusq+SEc971p0caV4zlw3nF07opAJANGy7Fge
iVbGq2iBlBQ=

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信