2.区块链信息的不可篡改

作者: 浮云发发 | 来源:发表于2018-04-16 16:28 被阅读23次

体验一下信息的不可篡改,hash或数据一旦修改,就会出现连不上与检验不通过。

NiuMessage.py

import hashlib
import datetime
from Transcation import Transcation

class NiuMessage:

    def __init__(self,transcation):
        self.transcation = transcation
        self.hash = None
        self.pre_hash = None
        self.timestamp = datetime.datetime.now()
        self.payload_hash = self._hash_payload() #交易后的hash

    def _hash_payload(self): #对交易时间与数据进行hash
        return hashlib.sha256( (str(self.timestamp) + str(self.transcation)).encode("utf-8") ).hexdigest()

    def _hash_message(self): #将前一个hash与交易后的hash,再hash
        return hashlib.sha256( (str(self.pre_hash) + str(self._hash_payload())).encode("utf-8") ).hexdigest()

    def seal(self): #就是将交易hash,设置为现在的hash,这里为什么不能赋值在构造器,因为构造器不能调用两个函数
        self.hash = self._hash_message()

    def __repr__(self):
        mystr = "hash:{} , pre_hash:{} , data:{}".format(self.hash,self.pre_hash,self.transcation)
        return mystr

    def validate(self,Message): #上个交易的hash与数据要能对上
        if (Message.hash != self.pre_hash):
            raise InvalidateMessage("交易hash被篡改 ," + str(self))
        if(Message.hash != Message._hash_message()):
            raise InvalidateMessage("交易数据被篡改 ,"+str(self))

    def link(self,Message):
        self.pre_hash = Message.hash

class InvalidateMessage(Exception):
    def __init__(self,*args,**kwargs):
        Exception.__init__(self,*args,**kwargs)

if __name__ == "__main__":
    t1 = Transcation("I", "him", 10)
    t2 = Transcation("him", "it", 10)
    t3 = Transcation("it", "her", 10)

    m1 = NiuMessage(t1)
    m1.seal()

    m2 = NiuMessage(t2)
    m2.link(m1)
    m2.seal()
    m2.validate(m1)

    m3 = NiuMessage(t3)
    m3.link(m2)
    m3.seal()
    m3.validate(m2)

    print(m1)
    print(m2)
    print(m3)

    #m2.hash="33" 
    #m2.transcation = "fda"
    #m3.validate(m2)

Transcation.py

import datetime

class Transcation:
    def __init__(self,payer,recer,money):
        self.payer = payer
        self.recer = recer
        self.money = money
        self.timestamp = datetime.datetime.now()

    def __repr__(self):
        return str(self.payer) + " pay " + str(self.recer) + " " + str(self.money) + " " + str(self.timestamp)

去掉上面的注释,即可感受到连不上与校验错误。

相关文章

  • 2.区块链信息的不可篡改

    体验一下信息的不可篡改,hash或数据一旦修改,就会出现连不上与检验不通过。 NiuMessage.py Tran...

  • 通证经济所用到的四个特性

    01 四大特征之一:不可篡改 区块链最容易被理解的特性是它的不可篡改的特性。 不可篡改是基于“区块+链”(bloc...

  • 区块链能解决慈善低效吗?

    区块链有交易账本公开透明的特性! 区块链有转账信息不可篡改的特性!! 区块链有去中介机构的特性!!! 与此同时: ...

  • 区块链+双十一

    今年双十一,区块链首度在大众视野亮相,区块链是一个公共账本,信息不可篡改,可溯源。 入门区块链确实是有门槛的,目前...

  • 区块链技术在社群中的应用价值有哪些?

    虽然诞生时间不长,但“区块链”近几年已成投资界和IT界最热门的词汇。区块链的突出特征包括:去中心化、信息不可篡改、...

  • 区块链监管的各国实践

    一、区块链概览 区块链以去中心化、开放性、信息不可伪造和篡改、自治性等特点,在金融服务、医疗健康、IP版权、教育、...

  • 区块链随想

    区块链技术的核心是价值传递机制,分布式记账技术,所有的数据不可篡改,信息和大数据非常安全;随着区块链技术发展...

  • Zirkulation区块链,黑科技震撼来袭

    自2015年起,随着区块链的发展,区块链技术去中心化、共识机制、信息可追溯且不可篡改等技术特性,逐渐受到社会诸多领...

  • 区块链数据存储模式剖析

    在区块链落地场景中,区块链的作用,有时候被定义为用于信息存证的,具有不可篡改特性的“公示板”,例如在很多溯源、票据...

  • 从人类信息传播历史的角度去看区块链的未来发展

    区块链——区块链对信息传播的重要价值在于:通过一系列技术实现信息的不可篡改这一特性。可能会成为人类进步过程中比肩印...

网友评论

    本文标题:2.区块链信息的不可篡改

    本文链接:https://www.haomeiwen.com/subject/opyekftx.html