主页 > 多语言仿imtoken钱包系统 > 以太坊私钥生成过程 用HTTPS加解密(二)

以太坊私钥生成过程 用HTTPS加解密(二)

多语言仿imtoken钱包系统 2023-06-04 07:31:30

大家好,我是向网,这里是我的头条号“向网说”,欢迎来到,欢迎再次光临~

最近几天因为彻底放手,我也从“杨过”变成了“杨康”,加上家人去世,所以好久没来得及更新,特此致歉~

上次讲了对称加密算法,这次要讲另一种加密算法:非对称加密算法。

与对称加密算法不同,在非对称加密算法中,信息的发送方和接收方需要持有两个密钥:公钥和私钥。 公钥和私钥成对出现:公钥必须公开,私钥必须保密。

发件人 A 使用收件人 B 的公钥加密,收件人 B 使用自己的私钥解密。 整个过程是这样的:

以太坊区块生成时间_以太坊和以太经典未来哪个好_以太坊私钥生成过程

常用的非对称加密算法有几种:

1.RSA/DSA

2.ECDSA/ECC

3.PKCS

RSA是一种非常常见的非对称加密算法。 它的加密和解密算法也是公开的。 它的运行机制几乎是简单一句话“无法从公钥推导出私钥”。

非对称加密算法生成的密钥成对出现,一把公钥和一把私钥由用户保管。

RSA被认为是最好的非对称加密方案之一,支付宝的支付接口调用使用RSA。

“不可能从公钥推导出私钥”的机制是基于大整数因式分解的难度,其安全性可以抵御目前已知的大部分密码攻击。 RSA的加解密过程如下:

以太坊私钥生成过程_以太坊区块生成时间_以太坊和以太经典未来哪个好

可见,要想得到一个能产生1024位或2048位二进制的素数乘积,参与运算的两个素数必须是天文数字。 因式分解质数的乘积非常困难,即使使用计算机也是如此,因为质数因子太多了。 这就是为什么可以说几乎“不可能从公钥推导出私钥”。

DSA 和 RSA 的主要区别在于它不用于加密和解密,而仅用于签名。 用于银行自助柜台和金融APP上的签名软件。 DSA签名生成速度很快,但验证速度相对较慢以太坊私钥生成过程,加密较慢,解密速度很快。 这一点与RSA正好相反,其安全性与RSA相差无几。 事实上,OpenSSH 7.0 及以上版本默认禁用了 DSA 算法。

以太坊区块生成时间_以太坊私钥生成过程_以太坊和以太经典未来哪个好

全称是Elliptic curve cryptography(椭圆曲线密码学),用于在以太坊中生成比特币地址(比特币椭圆曲线使用secp256k1算法:y2 = x3 + 7)。 ECC的数学基础是黎曼几何中无限点的性质和群率(GROUP LAW)公式,解释起来很麻烦。

比特币的加解密过程可以通过OpenSSL来演示。 这个OpenSSL在Linux上一般都是默认安装的。 Windows上的安装可以问度娘。

第一步:生成ECC私钥

# openssl ecparam -name secp256k1 -genkey > private.pem

# 查看结果

# 猫 private.pem

# 以DER格式输出

# openssl ec -in private.pem -outform DER | 尾-c +8 | 头-c 32 | xxd -p -c 32 > private.der

# 猫 private.der

# 查看结果

#777cba7ba9b5d29a9f27ce67e8e88cce40abe5099e2bc8db4eaa14794726b5a2

第二步:生成ECC公钥

通过 private.pem 生成未压缩的公钥

# openssl ec -in private.pem -pubout -outform DER | 尾-c 65 | xxd -p -c 65 > public.der

# 查看结果(未压缩公钥=前缀04+x坐标+y坐标)

# 猫 public.der

# 044d678b6b0870adbe3419dcce114600fd1a19a660925ad82e61c23489218baf847e2f550371b8ffe405913e9a3b6c3954f0e186bd2bf7769a62ea9fcf1c592d25

以太坊和以太经典未来哪个好_以太坊区块生成时间_以太坊私钥生成过程

# 压缩公钥(前缀03 + x(如果y为奇数),前缀02 + x(如果y为偶数))结果

#03edc773f78984a68dcad837d7fdf088c2efd434a088d9d6d1a7dc1e8770ea0b

第三步:执行Hash160操作

先进行SHA256运算,再进行RMD160运算

# openssl sha256 public.der

# 结果

#8674a407487bb7808bbb2c1ac12603f1f3a480e98c01abbebd03477c5179f974

# 保存结果

# echo 8674a407487bb7808bbb2c1ac12603f1f3a480e98c01abbebd03477c5179f974 > public_sha256.der

# openssl ripemd160 public_sha256.der

# 结果

# 9870db0ccf40cfd970b503fb031c889d089a4cd4

# 保存结果

# echo 9870db0ccf40cfd970b503fb031c889d089a4cd4 > public_rmd160.der

第四步:添加ECC前缀

可以在第3步的结果中加上比特币地址前缀(具体地址可以问度娘),比如常见的主网地址是00

#00+9870db0ccf40cfd970b503fb031c889d089a4cd4

以太坊私钥生成过程_以太坊区块生成时间_以太坊和以太经典未来哪个好

# 结果

# 009870db0ccf40cfd970b503fb031c889d089a4cd4

# 保存结果

# vi public_rmd160.der

# 在前面加00,保存退出

# 查看结果

# 猫 public_rmd160.der

第 5 步:执行 SHA256

进行两次SHA256,取前8位作为校验和

# openssl sha256 public_rmd160.der

# echo c6349f1cb358dcd7af0dc8fd4cf7aa82293142eea7d97f45c83e86595ac22c04 > public_sha256.der

# openssl sha256 public_sha256.der

# 结果

#9550d445c36fc5d37cadfa1fff385121388a7e15d05fc78244c30e8aa9647908

# 获取前八位数字

#9550d445

第 6 步:合并第 4 步和第 5 步的结果

以太坊私钥生成过程_以太坊和以太经典未来哪个好_以太坊区块生成时间

# 第四步的结果

# 猫 public_rmd160.der

# 009870db0ccf40cfd970b503fb031c889d089a4cd4

# 第五步结果

#9550d445

# 结果合并

# echo 009870db0ccf40cfd970b503fb031c889d089a4cd49550d445 > public_result.der

第七步:进行Base58编码

Base59编码是一种独特的编码方式以太坊私钥生成过程,是Base64的变形,主要用于比特币钱包地址。

出于演示目的,仅使用 Base64 执行编码

# openssl base64 -in public_result.der

# 结果

#MDA5ODcwZGIwY2NmNDBjZmQ5NzBiNTAzZmIwMzFjODg5ZDA4OWE0Y2Q0OTU1MGQ0NDUK

小知识:在比特币系统中,通过私钥可以得到公钥,通过公钥可以得到钱包地址,即:私钥=>公钥=>钱包地址,反之则不行可能的。

PKCS的全称是Public-Key Cryptography Standards(公钥密码学标准),是由RSA公司设计和发布的一系列安全标准。 主要用于证书申请、更新、失效、数字签名、数字信封等创建。 例如苹果的IOS目前使用的是PKCS12标准证书。

还是以OpenSSL生成PKCS12为例。

第 1 步:密钥生成和使用

以太坊和以太经典未来哪个好_以太坊区块生成时间_以太坊私钥生成过程

生成一个 1024 位的私钥并保存在 rsa_private_key.pem 中

# openssl genrsa -out rsa_private_key.pem 1024

通过私钥生成公钥,保存在rsa_public_key.pem中

# openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

第二步:生成pkcs12文件

Keystore keyrepo.p12,密码123456,有效期1天

# keytool -genkey -v -alias root -keyalg RSA -storetype PKCS12 -keystore keyrepo.p12 -dname "CN=www.company.com,OU=company,O=company,L=Wuhan,ST=Hubei,C=China “-storepass 123456-keypass 123456-有效性 1

生成客户端证书

# keytool -genkey -v -alias p12client -keyalg RSA -storetype PKCS12 -keystore keyrepo.p12 -dname "CN=www.company.com,OU=company,O=company,L=Wuhan,ST=Hubei,C=China “-storepass 123456-keypass 123456-有效性 1

查看生成的证书

keytool -list -v -alias p12client -keystore keyrepo.p12 -storepass 123456 -storetype PKCS12

将p12证书导出为.cer格式

keytool -export -alias p12client -keystore keyrepo.p12 -storetype PKCS12 -storepass 123456 -rfc -file p12.cer

# 查看.cer文件

keytool -printcert -v -file /p12.cer

可以看出PKCS的密钥生成过程比ECC要简单的多。

谢谢你的到来! 技术、产品、运营管理等方面的咨询,请关注并留言。 欢迎骚扰,是荣幸~

我上了头条