比特币的私钥【区块链生存训练】
投资比特币,钱包和私钥是非常重要的两个概念,在这上面多花一些时间琢磨透是绝对值得的。千万别忙忙活活几个月,只因犯了一个低级错误,把买来的BTC拱手送人了。
我推荐新手一定要试试Bitcoin Core钱包,虽然这款钱包非常笨重,但非常适合理解比特币和区块链中的各种概念和基本原理。该软件是一款全节点客户端,当你同步完成了最新的交易数据后,断网也可以运行。
加密钱包
安装完Bitcoin Core钱包客户端后,在接收第一笔BTC之前,一定要加密钱包,从“设置”菜单中,找到“加密钱包...”,输入密码即可完成钱包加密的过程。务必牢记密码、牢记密码、牢记密码,重要的事情说三遍,因为没有取回密码的选项。
背后原理:上述操作实际上是把你的wallet.dat钱包文件用AES算法(高级加密标准,Advanced Encryption Standard)进行了加密处理,这样即使别人拿走了你的Wallet.dat文件,没有密码也无法找到你的私钥。
私钥
比特币里的私钥实际上是256位(32个字节)的随机数字,如果你认为机器产生的数还不够随机,可以自己扔上256次硬币,正面为0,反面为1,生成的私钥记为 k 。
私钥经过非对称加密处理,产生公钥 K,因为是非对称加密,所以无法从K反算出k。因为K还是太长、不容易辩认、可能还不够安全,就又经过一次处理,变成了我们公布给别人的比特币地址A了。同样,根据A,也不能反算出公钥K,就更不能算出你的私钥k了。
整个比特币的安全体系就是建立这套加密算法的基础上的。
插图摘自《精通比特币》
进阶操作
私钥隐藏在钱包软件中,你在支付比特币时,需要输入密码,钱包软件会自动把私钥取出,进行数字签名等操作,你根本看不见私钥。如果很想看看私钥长什么样子,可以这样操作。
从“帮助”菜单里,打开调试窗口。
在控制台窗口的底部的文本框中输入这两条命令,回车:
walletpassphrase "请换成你的钱包密码" 60
dumpwallet wallet-priv.txt
这条命令中的60,表示密码的过期时间,在60秒之内不用重复输入密码。
记住:在进行这些命令行操作时,千万不要让外人看到你的钱包密码。如果操作正确,每个命令之后会返回null。再到Bitcoin Core的安装文件夹下,可以找到wallet-priv.txt文件,打开后,内容是这样的:
从第8行开始,左侧的那一长串字符是私钥,在addr=后面的是公开的比特币地址。
看完这个wallet-priv.txt文件之后,请把该文件彻底删除,以免落入外人之手。
小结:
- wallet.dat钱包一定要加密
- 牢记密码
- 私钥k产生公钥K,再生成比特币地址A
- dumpwallet可以导出私钥为文本文件,如果你不知道正在干什么,就不要操作这条命令了
- Elasticsearch聚合优化 | 聚合速度提升5倍!
- Elasticsearch聚合后分页深入详解
- 可扩展机器学习——线性回归(linear Regression)
- 简单易学的机器学习算法——Label Propagation
- 利用Theano理解深度学习——Convolutional Neural Networks
- 持续精进——我的2017年终总结
- 实战 | Elasticsearch打造知识库检索系统
- Elasticsearch实战 | 必要的时候,还得空间换时间!
- 转--以io.Writer为例看go中的interface{}
- Go支持https协议的简单例子
- Elasticsearch索引增量统计及定时邮件实现
- 机器学习中的特征空间
- 简单易学的机器学习算法——马尔可夫链蒙特卡罗方法MCMC
- 推荐算法——基于图的推荐算法PersonalRank算法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SpringDateJPA 系列之 JPA 中的相关操作
- python Turtle 画出“精美碎花小清新树”快来拿代码!
- SpringDataJPA 系列之 JPA 简介
- Leetcode 264. 丑数 II (数论,三指针,类dp)
- Leetcode 628. 三个数的最大乘积 (数学)
- Vue 组件化开发
- Spring Boot 基础配置
- 读懂 Java 单例模式
- 数值分析第一次实习题报告
- Leetcode 409. 最长回文串 (Hash)
- Vue 前后端交互基础
- Spring Boot 入门
- Nginx 负载均衡
- Leetcode 289. 生命游戏(元胞自动机模拟)
- Nginx 简介