由区块链引发的密码技术讨论(一)概论

 

前言:

由于近来区块链概念的大火,使我认真阅读完Andreas M Antonopoulos大神的《精通⽐特币第二版》一书,按照我的阅读理解,比特币技术没有什么颠覆性的技术革新,它更多的是前人技术的叠加,然后利用了人性贪婪这一特性而形成链式效应,最后成功。本文不对区块链,或者说比特币进行概况性的介绍,而是讲述区块链所必须使用的密码技术原理。由于水平有限,希望能够写明白。

第一章 什么是密码技术

我们举个例子,小强要发一份电子邮件给小红,电子邮件的内容是:“今天晚上6点,天河城吃饭,不见不散!”,但是网络中一个的黑客小白,也是小强的情敌,他利用网络抓包工具窃听小强与小红的网络链路,截取了邮件内容。如下图:

那么,小白提前知道了小强与小红的约会,他就可以做很多事,至于做什么事就不在本文讨论的范围了。小强如何防止让小白知道他的约会呢?有一个办法,把“今天晚上6点,天河城吃饭,不见不散!”这句话加密,让小白截取了也看不明白,然后与小红预先约定的密码,小红收到加密的信息后使用预先约定的密码解密,还原出“今天晚上6点,天河城吃饭,不见不散!”这个约会。如下图:

这是一个最简单的加解密模型,小强通过AES算法,以及他和小红约定的密码(密码是他们两个人的生日连接,如“1999111120000520”),这个密码在计算机术语就叫密钥,AES算法就是一种数学运算规则,我们把密钥和算法称为密码技术。

由于小白不知道他们之间的密钥“1999111120000520”,所以他拿到的是:

k0oj5cPNQQAoqkqKHC4d94kBEyczzYd8+IPpNfVDnDa3un1weqcz17mYsvOeIQ6aMxA5+ulF3xviiaJrEtfW6w==

这一串加密的文本,无法解密,所以不知道内容是什么,而小红拿到了这一串加密的文本后,通过密钥“1999111120000520”及AES算法解密,就可以还原出加密前的内容:

今天晚上6点,天河城吃饭,不见不散!

下面通过python语言,实现这一过程的代码,注意你的计算机要导入pyCryptodome模块,如果你对编程没有兴趣,以下内容可以跳过不看

# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
import base64

def Addtext(Emailtext):
    while len(Emailtext.encode('utf-8')) % 16 != 0:
        Emailtext += '\0'
    return str.encode(Emailtext)

key = '1999111120000520'
text = '今天晚上6点,天河城吃饭,不见不散!'

aes = AES.new(str.encode(key), AES.MODE_ECB)
encrypted_text = str(base64.encodebytes(aes.encrypt(Addtext(text))),encoding='utf8').replace('\n', '')
decrypted_text = str(aes.decrypt(base64.decodebytes(bytes(encrypted_text,encoding='utf8'))).rstrip(b'\0').decode("utf8"))

print('加密文本:', encrypted_text)
print('解密文本:', decrypted_text)

代码运行结果

加密文本: k0oj5cPNQQAoqkqKHC4d94kBEyczzYd8+IPpNfVDnDa3un1weqcz17mYsvOeIQ6aMxA5+ulF3xviiaJrEtfW6w==
解密文本: 今天晚上6点,天河城吃饭,不见不散!

Process finished with exit code 0

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值