二维码

4.1 简单的本地储存 - 数据结构 - 机器学习

1260 人阅读 | 时间:2021年01月15日 01:10
4.1 简单的本地储存 - 数据结构 - 机器学习 #daohang ul li t,.reed .riqi,a.shangg,a.xiatt,a.shangg:hover,a.xiatt:hover,a.shang,a.xiat,a.shang:hover,a.xiat:hover,.reed-pinglun-anniu,span.now-page,#daohangs-around,#caidan-tubiao,#daohangs,#daohangs li,#btnPost{background-color:#D10B04;} .dinglanyou1 h3{border-bottom:3px solid #D10B04;} #dibuer{border-top:2px solid #D10B04;}.cebianlan .rongqi h3{border-bottom:1px solid #D10B04;} #edtSearch{border:1px solid #D10B04;} #daohang .zuo ul li{border-right:1px solid #;} #daohang ul li t a{border-top:1px solid #;border-right:1px solid #D10B04;} #daohang ul li t a:hover{border-right:1px solid #;} #daohang .you ul li a:hover,#daohang .zuo ul li a:hover,.reed-pinglun-anniu:hover{background-color:#;} a:hover,.reed h6 a:hover,#dibuer a:hover,.reed .riqiding,.cebianlan .rongqi li a:hover,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.shu a,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.huifuliuyan a:hover,.reed-biaoti h6 span{color:#D10B04;} .reed .kan a{color:#0A0AF5;}.reed .kan a:hover{color:#D10101;} @media screen and (max-width:1492px){a.shang,a.xiat{background:none;} a.xiat:hover,a.shang:hover{background-color:#f9f9f9;background-image:none;text-decoration:none;}} var _hmt = _hmt || [];(function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?2d748c9763cfc72fb7d1ccab29f0770d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f6d451f3f1be23f3abf240c64c469c1b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();

当前位置:首页 » 区块链精品文章 » 正文

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646201", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646162", container: s }); })();

4.1 简单的本地储存

1110 人参与  2018年09月12日 14:35  分类 : 区块链精品文章  评论

让我们从最简单的储存方式开始,也就是把比特币存放在本地设备上。如我们之前所说,要使用比特币,你首先要知道 一些公共的信息和一些私密的信息。公共信息就是那些记录在区块链上的内容——该比特币的识别信息、币值等。私密信息即比特币持有人——也就是你本人的私 钥。你不必太担心如何储存公共信息,因为你随时都可以去调取。但是私钥则是你需要好好保管的。所以在实际运用中,储存比特币就是储存与管理你的私钥。

储存比特币其实就是如何保存和管理比特币私钥。

储存与管理私钥,主要有三个目标:第一是可获取性,当你要用比特币的时候,可以随时随地取用;第二是安全 性,保证没有其他人可以动用你的比特币,如果有人能动用你的比特币,那他可以直接转账给自己,之后你就不再拥有这个比特币;第三是便利性,密钥管理应当是 简单易行的。你可以想到,要同时做到这三点是很不容易的:

不同的密钥管理方法就是对上述三点(可获取性、安全性和便利性)做出权衡。

最简单的钥匙管理当然是把它们储存在你自己的本地设备上:你的个人电脑、你的手机,或你持有的、拥有的或控 制的小玩意。用智能手机应用软件,按几个键你就可以支配使用你的比特币了,这么做的确非常方便。但这样做的可获取性或安全性都不是很好,如果你的设备丢 失,或者你的设备死机,你需要格式化你的磁盘,或者你的文件被病毒侵蚀,你的私钥就丢失了,你的比特币也就一同丢失了。安全性方面的问题是类似的,例如有 人窃取你的设备或入侵你的设备或者让你的设备中毒,将你的私钥拷贝,这样他们就可以将你所有的比特币转给他们自己了。

换言之,将私钥存储在你的本地设备,尤其是手机设备,就好比你将钱放在你的钱包里。在日常花销的时候是很方便,但你一定不想将你的毕生积蓄都带在身边,因为你不想遗失或被盗。所以一般而言,你只把一小部分信息——一小部分钱放在你的钱包里,而把你大部分钱存在其他地方。

比特币钱包软件

如果你想本地存放比特币,一般都会使用比特币钱包软件,也就是一个管理你的比特币和私钥信息并让你方便使用 的一个应用软件。例如你想花相当于4.25美元的比特币在咖啡馆买杯咖啡,这个钱包应用应该很容易让你做到。比特币钱包非常有用,尤其是你需要处理一大堆 地址和与其相关的密钥的时候。前面说过,制定一对公钥私钥很容易,你可以用其来匿名与保护你的个人隐私。钱包应用就是这样一个简单的接口,告诉你钱包里有 多少比特币。当你要使用比特币的时候,它会处理关于密钥管理的一切技术细节,比如使用密钥或生成新的地址等。

编码解码(encoding keys):Base58编码和二维码

要使用或是接收比特币,你需要与对方交换地址——比特币送达的地址。目前有两种主流的方式将地址加密:一种是字符串,另一种是QR(Quick Response)码[1]。

为了给地址赋予一个字符串,我们把密钥的字节从二进制字符转换成Base58码。Base58就是用一个包 含58个字符的字符集来编码,这被称为base58记号法。为什么是58个字符?我们把大写小写字母都算上,然后去掉几个比较容易混淆的字母,比如大写的 “O”与“0”看起来很像,就得到了58个字符。我们可以将加密的地址读出来,或者在需要时也能够打印出来。理想情况下,最好能避免这种手工的方式,而是 采用其他方法,例如我们接下来要讨论的QR码。

1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

以上就是比特币创世块地址的Base58代码。

4.1 简单的本地储存 - 数据结构 - 机器学习

图4.1 QR码

注:一个QR码代表着一个真实的比特币地址。请扫上面的QR码给我们转账一些比特币。

第二种方法是用QR码,一种简单的二维码。用QR码的好处是你可以用手机拍张照片,然后钱包应用会把QR 码自动转换成代表比特币地址的字节。这对商店十分有用:比如一个付款机可以显示一个QR码,你可以用手机扫描一下,然后就可以用手机把比特币转账到付款地 址。这对于手机与手机之间的转账也很有用。

虚荣地址

有些商家或个人喜欢将地址转换成一些人能够识别的字符。例如,博彩公司网站中本聪骨头(Satoshi Bones)的收款地址中就含有“骨头”(bones),如下所示的2—6位字符 (1bonesEeTcABPjLzAb1VkFgySY6Zqu3sX),当然所有的地址都是1开头的,代表支付到比特币地址的标准交易或者说是标准的 比特币转账流程(pay-to-pubkey-hash)。

地址都是通过哈希计算产生的随机字符串,那么如何才能获得含有“bones”字符串的地址呢?如果中本聪骨 头只是随便制定它们的地址,无法进行逆向计算哈希函数,它们无法得到相应的私钥,也无法控制地址的生成。这样的话,它们只能不停地重复生成私钥,直到私钥 中包含它们希望出现的字符串。这样的地址被称为虚荣地址(vanity address)。这种地址事实上是可以通过工具生成的。

一般需要多少工作量能得到这样的结果呢?由于每个字符位有58种可能性,如果你想得到一个字符串中有k个字 节的特殊字符,你平均需要生成58的k次方次地址,才能获得你要的结果。所以如果要生成“bones”开头的地址则要生成超过6亿个地址!这个工作现在通 过一台笔记本电脑就可以完成。但是你每增加一个字符,工作量会几何级数增长。获得一个15位字符的地址需要的计算量难以想象,而且是不间断的哈希计算,这 是无法实现的。

4.1 简单的本地储存 - 数据结构 - 机器学习虚荣地址的加速生成

在比特币世界,如果我们将一个私钥称为x,公钥是gx,其地址是H(gx),即公钥的哈希值。我们不会探讨其中的细节。但是通过指数运算来生成地址显然是很慢的。

最直接的方式是挑选一个伪随机序列x,计算H(gx),不停地生成地址,直到得到想要的结果为止。一个更快的方式是,如果使用x无法得到想要的结果,接下来就使用x+1来计算,如此反复。而不是重新挑选一个x。因为gx+1 =g gx,而我们已经计算过了gx,所以我们只需要做乘法运算而无须做指数运算,这会更快。事实上,这种方式比最直接的方式要快两个数量级以上。

[1] QR码是一种简单的二维码。——译者注

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=409

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{},"image":{"viewList":["qzone","tsina","tqq","renren","weixin"],"viewText":"分享到:","viewSize":"16"},"selectShare":{"bdContainerClass":null,"bdSelectMiniList":["qzone","tsina","tqq","renren","weixin"]}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646186", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646175", container: s }); })();
搜索

网站分类

标签列表

最近发表

    (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!

jQuery(document).ready(function($){ /* prepend menu icon */ $('#daohangs-around').prepend('
'); /* toggle nav */ $("#caidan-tubiao").on("click", function(){ $("#daohangs").slideToggle(); $(this).toggleClass("active"); }); });

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
关闭广告
关闭广告
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×