引 子
本人在此系列文章的第一篇:玩转比特币之一:私钥/公钥/地址中提到自己生成安全私钥的重要性和必要性,而且在第二篇文章玩转比特币之二:自己动手生成安全私钥中给出了具体的生成方法,给出了Python脚本和一些需要注意的要点。大家可以借鉴,不瞒各位,我就是采用这个方法来生成自己的私钥和地址。
另外,我在第一篇中提到私钥难以记忆,有没有好的办法,答案是肯定的,有办法可以生成安全又易记的私钥和地址。具体的方法敬请期待我的下一篇文章。
这里要特别提请注意的是我介绍的方法不同于通用钱包使用的方法。现在大多数钱包是Deterministic wallet(确定性钱包),实现BIP32协议,能通过一串助记词生成许多许多私钥和地址,因此你记住这12个单词或汉字就好了。但是,相信我,这启示是不够安全的,具体原因我下文再讲。
那么本文呢,来点轻松的,如何通过已有的私钥生成公钥和地址,其实,介绍的文章很多,算法是确定的,这里主要是为了系列文章的完整性,同时也是为了便于各位查阅,附带python脚本,可直接使用。
私钥、公钥、地址的生成流程
技术性的东西不细谈,文章很多,关键几点也说过了,私钥是32位的数,为了可读性和安全性加入了版本,校验和Base58编码;椭圆曲线算法求得公钥,哈希两次取得私钥。
有兴趣可以参阅一文读懂比特币私钥、公钥、钱包地址的来历和关系。下图也是出自与此文:
由私钥生成公钥
直接上python脚本,直观简单,基本上是一句话搞定
注1: s 为私钥的16进制表示,函数返回16进制表示的公钥
注2: ecdsa是常用的一个加密签名数据包,SECP256k1是比特币使用的椭圆曲线算法。
生成地址
哈希哈希,地址就生成了,还是直接上python脚本。
注1: s 为共钥的16进制表示,函数返回base58编码的地址
注2: hashlib是常用的一个散列数据包。这里采用ripmd160散列算法,做两次摘要。
一般而言,你不需要记忆和存储公钥,因为其可以直接由私钥计算而来,但你需要记下地址,因为你需要用它来向里转入比特币(囤币),那么这样的话,直接通过私钥生成地址好了。那就把前面的脚本放到一起就可以了
私钥和地址的保存和使用
当你生成了一批私钥和地址,你的银行账户就开好了,这是你自己开的,没有依赖任何人。这些私钥和地址(就是纸钱包),主要目的是给你囤币用的,就是中长期存款。当然,你一定还需要别的钱包,用来做小额的支付消费和交易等。
使用这些纸钱包的注意事项:
私钥绝对币可以示人,自己保存,保密
在需要入账时,告知转账人你的地址
当你需要给被人转账时,把你一个账户的比特币全部导入你的一个电子钱包,多数钱包都有直接读取私钥进行转账的功能,然后进行转账
当一个钱包被被使用过一次导出操作后,最好不要再使用。也就是说,私钥只使用一次
因此,你需要很多组私钥地址对来长期使用,这没什么,你有币,为了安全,这是值得的
附:完整脚本
前期文章:
玩转比特币之一:私钥/公钥/地址
玩转比特币之二:自己动手生成安全私钥
下一篇:生成你记得住的私钥
领取专属 10元无门槛券
私享最新 技术干货