由區塊鏈引發的密碼技術討論(一)概論

2021-09-29 19:47:12 字數 2045 閱讀 8576

由於近來區塊鏈概念的大火,使我認真閱讀完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

關於區塊鏈引發的下一代支付討論

去中心化化 區塊鏈是一種分布式賬本技術,所有的交易記錄不再依賴某個中心化機構來記錄,而是全球節點共同參與記錄交易。這裡需要注意,在區塊鏈的世界裡,不是只有與錢相關的交易才是交易,可以通俗的理解,所有的在區塊鏈賬本裡記錄的變更都是一種交易。既然是共同參與,那去中心化帶來的利好是什麼呢?第一,可以擺脫一...

由 引發的思考

前陣子在乙個移動專案中,通過 的方式 繫結click 事件來提交乙個表單,由於表單資訊比較敏感,於是採用的post 同步提交的方式,原本到也沒有什麼。後來萬惡的pm說 你這個按鈕呀,要固定在底部比較好 於是乎就通過 position fixed 固定到底部了。那麼,問題來了 在ios 下,虛擬鍵盤是...

由Typedef引發的問題

由typedef 引發的問題 自 用來宣告乙個別名,typedef 後面的語法,是乙個宣告。本來筆者以為這裡不會產生什麼誤解的,但結果卻出乎意料,產生誤解的人不在少數。罪魁禍首又是那些害人的教材。在這些教材中介紹 typedef 的時候通常會寫出如下形式 typedef int para 這種形式跟...