标签: 区块链

  • 区块链原理之一:关于Hash哈希算法

    哈希算法有时候被称之为摘要,这个比喻有点不精确,因为摘要毕竟还是要让人看懂的,而哈希算法后的数字,人是完全读不懂的。而且我们哈希后的字符串可能比原文还要长,所以这个比喻不太恰当。

     

    简单来说,通过哈希算法:

     

    同样的输入一定会有同样的输出。但你拿输出要想还原输入则不可能。

    无论多长或者多短的输入,输出都是一样长的。

    改动一点点,输出就会完全不一样,且毫无规律。

    用点例子就秒懂了。

     

    from hashlib import sha256

     

    my_string = “Hello”

    sha256_digest = sha256(my_string).hexdigest()

    print sha256_digest

    我们这里用Python现成的库来实验SHA256算法。

     

    运行结果:

     

     

    输出:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

     

    完全看不懂是什么,重点是当我们知道输出是185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

     

    完全没办法还原成原始信息Hello,但这不是随机数。

     

     

     

    只要输入信息一致,结果肯定是完全一样:

     

    same_string=”Hello”

    sha256_digest = sha256(same_string).hexdigest()

    print sha256_digest

     

     

    如果输入有哪怕一点点小小的不一样,结果会完全不同,并且完全无法预测。

     

    diff=”hello”

    sha256_digest = sha256(diff).hexdigest()

    print sha256_digest

     

     

    只是把Hello的第一个字母改成小写的h,两者的结果完全看不出联系。

     

    2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824这个结果和185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969是看不出啥联系的,这个效应称之为“雪崩效应”。

     

    也就是说,哪怕任何一点点不同的输入都能保证有不同的输出,并且不可逆。

     

    并且,长度不一样的信息哈希后,长度是一致的。

     

    long_string=”The quick brown fox jumps over the lazy dog”

    sha256_digest = sha256(long_string).hexdigest()

    print sha256_digest

     

     

     

    不同长度的字符串哈希后,结果的长度是一致的。

     

    这里有个问题,输出的字符串的长度必然是一致的话,哈希的结果应该是有穷的。但我们输入的信息可能性是无穷的,这意味着必然有“撞车”事件发生。理论上是的,但不必担心,这种事情发生的概率很小,可以忽略不计。

     

    哈希算法的用处很多,比如我们验证文件下载是否完整时,就会应用到。因为哪怕一个字节有不一样,雪崩效应也会让哈希后的值完全不一样,所以哈希值一样可以保证你下载的文件和上传者的完全一致。

     

    这里的SHA1值就是一个哈希值,下载完文件后跑同样的算法,如果结果和这个一致,那就证明一个字节都不差,可以放心。

     

    另外一个比较多的应用场景是储存你的密码,你在注册一个网站的时候,网站后台的数据库是不存储你的密码的,因为这样做不安全。万一网站的数据库被泄露了,用户的密码就都泄露了,但网站又要验证你的密码,怎么办呢?用哈希算法。

     

    第一次注册的时候,你的密码哈希后存储在数据库里,当你下次登录的时候密码再哈希一次,和存储的哈希值对比。如果完全一致,这证明密码键入和注册的时候一样。这样网站不用知道你的密码,还能验证你的密码。

     

    考虑到有些用户的密码十分简单,大量使用诸如abcd1234这样的密码,那我们事先把常用的密码哈希过后结果存起来,和网站泄露的数据库一对比,就能知道用户的密码是什么了。这种攻击方法确实存在,应对的办法是“加盐”,用户注册密码的时候,在密码后追加一个字符串,只有网站自己知道。验证的时候同样追加一个字符串,这样密码一致的时候,哈希值也会是一样的。但是攻击者不知道盐是什么样的字符串,这种攻击也就无效了。

     

    关于哈希算法的其他应用还有很多,重点了解数字签名算法。

  • 区块链是什么?说说我认为的区块链技术

    昨天听了一个关于区块链的课。在蜻蜓FM上。我发这篇文章目的有二。

     

    其一,想说说我认为的区块链。其二,我希望有高人能给我指点指点,因为我确实认识的还很浅薄。

    区块链,是门技术,又中本聪提出,并因为BTC,作为代表,而为世人所知,并且到今天已近10年,可以说,不算个新东西。可是,对于区块链,很多人根本就不明白。我也不明白。

    我要开始解释我认为的区块链了。有些地方可能是用词不准确。可是大体意思应该对。

    区块链是一种分布式的,点对点的,服务器。也就是说,你的电脑,就是一个节点,就是这个网络的一部分。而由此产生的信息流,不经第三方的监管且匿名。这里的信息流,包括了数据信息流,和未来的价值信息流。

     

    而区块链的代表,BTC,就是分布式的记账方式。你的账本,是公开的,匿名的,点对点,不受监管的,由公开的方式,确保了你的信用,这里的公开,是全网皆知。而比特币,只是为了满足分布式记账方式的一个媒介。也就是信用的媒介。如同,我们信用的媒介,是钱。

     

     

    说到钱,我们的钱除了在菜市场,商店,是点对点,如果需要转账,则必须通过中央银行。也就是中心化,中心化是个什么玩意。就是第三方信用。我们共同信任他,所以由他来监管我们的交易。这里就是回到了BTC,就是一种转账方式的去中心化。我们之间的转账,是匿名的,信用的,不被监视的。而这,是对所有银行的革命,对所有金融机构的革命,对所有需要信用支持的机构的革命。这也是为什么比特币率先在金融领域发力,因为金融领域不仅是需要信用托管的,而且还是数字化网络化的。

     

     

    关于区块链,其应用前景,绝不仅仅是金融领域,这是第二代互联网的雏形,也即价值传输互联网的起点,这势必改变世界。如果我们都可以通过互联网的价值传输,获取到价值,然后进行交易,那么依托与此的话,我们不用劳动就会挣到钱。

     

    这当然不会成为现实,因为一个最简单的道理,粮食不会自己从地里长出来,人要吃饭才能活着。

     

    区块链牛,但不是万能的,前景大,但不能神话它。但是有一点毫无疑问,区块链技术,会改变一些即成规则,进而改变世界的规则。

     

    区块链,威胁到金融信用的存在价值,试想如果钱不被国家控制了,那么国家的政权还有什么合法性?这也是本朝最不愿意面对的一个事实,这也是为什么本朝要禁止比特币交易的原因。这也显示了我们与西方列强意识形态的差距。

     

    可曾记得,古籍曾说过鸡犬相闻,老死不相往来的社会。也许,就在未来。