1.1. 生成账户

下面是使用 Java SDK 创建一个随机账户的方法,总共支持三种加密算法

1)ECDSA

SecureKey secureKey = SecureKey.getInstance("ECDSA", 1);
Credentials credentials = Credentials.create(secureKey);

2)SM

SecureKey secureKey = SecureKey.getInstance("SM", 1);
Credentials credentials = Credentials.create(secureKey);

3)ED25519

SecureKey secureKey = SecureKey.getInstance("ED25519", 1);
Credentials credentials = Credentials.create(secureKey);

具体使用哪一种需要跟 sdk 配置保持一致,具体见 thanos-web3j.conf:

crypto {
    #JCA cryptoprovider name.
    providerName="SC"
    #JCA sign Algorithm,such as ECDSA, ED25519 etc
    sign.algorithm="ECDSA"
    #sign.algorithm="ED25519"
    #sign.algorithm="SM"
    #Used for create JCA MessageDigest
    hash.alg256="ETH-KECCAK-256"
    hash.alg256="ETH-KECCAK-256-LIGHT"
    hash.alg512="ETH-KECCAK-512"
}

使用指定私钥创建账户的方式如下,以 ECDSA 为例

// SecureKey.fromPrivate(privateKeyBytes);
SecureKey secureKey = SecureKey.fromPrivate(Hex.decode("010001308f761b30da0baa33457550420bb8938d040a0c6f0582d9351fd5cead86ff12"));
Credentials credentials = Credentials.create(secureKey);

获取账户地址的方式如下

String accountAddr = credentials.getAddress();

1.2. 账户地址的计算

账户地址由 ECDSA 公钥计算得来,与以太坊兼容,对 ECDSA 公钥的 16 进制表示计算 keccak-256sum 哈希,取计算结果的后 20 字节的 16 进制表示作为账户地址,每个字节需要两个 16 进制数表示,所以账户地址长度为 40 。

1)生成ECDSA私钥

首先,我们使用 OpenSSL 生成椭圆曲线私钥,椭圆曲线的参数使用 secp256k1 。执行下面的命令,生成 PEM 格式的私钥并保存在 ·ecprivkey.pem· 文件中。

openssl ecparam -name secp256k1 -genkey -noout -out ecprivkey.pem

执行下面的指令,查看文件内容。

cat ecprivkey.pem

可以看到类似下面的输出:

-----BEGIN EC PRIVATE KEY-----
MHQCAQEEINHaCmLhw9S9+vD0IOSUd9IhHO9bBVJXTbbBeTyFNvesoAcGBSuBBAAK
oUQDQgAEjSUbQAZn4tzHnsbeahQ2J0AeMu0iNOxpdpyPo3j9Diq3qdljrv07wvjx
zOzLpUNRcJCC5hnU500MD+4+Zxc8zQ==
-----END EC PRIVATE KEY-----

接下来根据额私钥计算公钥,执行下面指令

openssl ec -in ecprivkey.pem -text -noout 2>/dev/null| sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}'

可以得到类似下面的输出:

8d251b400667e2dcc79ec6de6a143627401e32ed2234ec69769c8fa378fd0e2ab7a9d963aefd3bc2f8f1cceccba54351709082e619d4e74d0c0fee3e67173ccd

2)根据公钥计算地址

本节我们根据公钥计算对应的账户地址。我们需要获取 keccak-256sum 工具,可以从这里下载

openssl ec -in ecprivkey.pem -text -noout 2>/dev/null| sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}' | ./keccak-256sum -x -l | tr -d ' -' | tail -c 41

得到类似下面的输出,就是计算得出的账户地址。

dcc703c0e500b653ca82273b7bfad8045d85a470
Copyright © netease 2024 all right reserved,powered by Gitbook文档修订时间: 2024-10-12 17:03:52

results matching ""

    No results matching ""