以太坊中私钥和HASH都为32位,公钥为65位其中第一位是压缩字节0x04,压缩公钥为33字节,地址是是公钥的后64位hash后取后20个字节作为地址。签名数据为65位,R,S各32位,65位为0和1.
生成私钥
//生成私钥
key, err := crypto.GenerateKey()
if err != nil {
t.Fatalf("failed GenerateKey with %s.", err)
}
//带有0x的私钥
fmt.Println("private key have 0x \n", hexutil.Encode(crypto.FromECDSA(key)))
//不含0x的私钥
fmt.Println("private key no 0x \n", hex.EncodeToString(crypto.FromECDSA(key)))
private key have 0x
0xb1fb9a42d8478cf19bbc1cb4e75625ced1728c8de8691845f546b2ad84a7d379
private key no 0x
b1fb9a42d8478cf19bbc1cb4e75625ced1728c8de8691845f546b2ad84a7d379
私钥存储
//本地生成privatekey文件,保存私钥
if err := crypto.SaveECDSA("privatekey", key); err != nil {
log.Error(fmt.Sprintf("Failed to persist node key: %v", err))
}
b1fb9a42d8478cf19bbc1cb4e75625ced1728c8de8691845f546b2ad84a7d379
公钥16进制打印
fmt.Println("public key have 0x \n", hexutil.Encode(crypto.FromECDSAPub(&key.PublicKey)))
fmt.Println("public key no 0x \n", hex.EncodeToString(crypto.FromECDSAPub(&key.Publi