python實驗之數字簽名的產生和驗證

2021-10-06 09:52:51 字數 2934 閱讀 3605

利用python實現dsa或者rsa數字簽名的產生和驗證過程。

任務1:準備乙個私鑰檔案,乙個公鑰檔案,乙個資料檔案;

任務2:定義乙個函式,能夠使用指定的私鑰對資料檔案進行簽名,並將簽名結果輸出到檔案返回;

任務3:定義乙個函式,能夠使用指定的公鑰對任務2中的簽名檔案進行驗證,返回驗證結果;

任務4:利用任務1中的檔案對任務2和3中的函式進行測試。

實驗步驟:在專案中新建乙個 string.txt 檔案,裡面寫入待簽名資料,然後執行實驗

實驗結果:

以及生成了 file_sign.txt , prive.pem , public.pem 三個檔案,其中 file_sign.txt儲存了簽名後的資料。

:# 生成乙個公私鑰並寫入檔案

string=

'' random_rsa=random.new(

).read#建立乙個隨機數

prive_key=rsa.generate(

1024

,random_rsa)

# new a price key

public_key=prive_key.publickey(

)# new a public key

with

open

('public.pem'

,'w+'

)as file_public:

file_public.write(

str(public_key.exportkey(),

'utf-8'))

with

open

('prive.pem'

,'w+'

)as file_prive:

file_prive.write(

str(prive_key.exportkey(),

'utf-8'))

# 從檔案中讀取公私鑰

# read public_key from file

with

open

('public.pem'

,'r+'

)as file_public:

public_pem =

bytes

(file_public.read(),

'utf-8'

) public_key = rsa.importkey(public_pem)

# read prive_key from file

with

open

('prive.pem'

,'r+'

)as file_prive:

prive_pem =

bytes

(file_prive.read(),

'utf-8'

) prive_key = rsa.importkey(prive_pem)

#read string from file

with

open

('string.txt'

,'r+'

)as file_txt:

string = file_txt.read(

)return string, prive_key, public_key

defsign

(message, prive_key)

: digest = md5.new(message.encode(

'utf-8'))

# 生成摘要

cipher = pkcs1_v1_5.new(prive_key)

signature = base64.b64encode(cipher.sign(digest)

)# 對摘要加密並進行base64編碼

# put the result into a file

with

open

('file_sign.txt'

,'w+'

)as file_sign:

file_sign.write(

str(signature,

'utf-8'))

return

defunsign

(message, public_key)

:# read signature from file

with

open

('file_sign.txt'

,'r+'

)as file_sign:

signature=file_sign.read(

) signature = base64.b64decode(signature)

cipher = pkcs1_v1_5.new(public_key)

digest = md5.new(message.encode(

'utf-8'))

# 生成摘要

return cipher.verify(digest, signature)

# 摘要解密並比對摘要

[string, prive_key, public_key]

= product_key(

)sign(string, prive_key)

print

(unsign(string, public_key)

)

web介面之數字簽名

什麼是數字簽名 所謂數字簽名 digital signature 又稱公鑰數字簽名 電子簽章 是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,乙個用 於簽名,另乙個用於驗證。數字簽名的實現 數字簽名的簡單例項是直接利用...

數字簽名的驗證

通常的我們在軟體發布前要對binary dll,exe 進行數字簽名,數字簽名可以標識軟體的發布商,也可以通過數字簽名來檢查此軟體是否被修改或受病毒影響。sigcheck是來自sysinternals的數字簽名驗證工具,可以檢視指定的檔案或目錄下的哪些檔案沒有數字簽名。此工具是命令列工具,可以用來批...

數字簽名的驗證

通常的我們在軟體發布前要對binary dll,exe 進行數字簽名,數字簽名可以標識軟體的發布商,也可以通過數字簽名來檢查此軟體是否被修改或受病毒影響。sigcheck是來自sysinternals的數字簽名驗證工具,可以檢視指定的檔案或目錄下的哪些檔案沒有數字簽名。此工具是命令列工具,可以用來批...