利用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)
(unsign(string, public_key)
)
web介面之數字簽名
什麼是數字簽名 所謂數字簽名 digital signature 又稱公鑰數字簽名 電子簽章 是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,乙個用 於簽名,另乙個用於驗證。數字簽名的實現 數字簽名的簡單例項是直接利用...
數字簽名的驗證
通常的我們在軟體發布前要對binary dll,exe 進行數字簽名,數字簽名可以標識軟體的發布商,也可以通過數字簽名來檢查此軟體是否被修改或受病毒影響。sigcheck是來自sysinternals的數字簽名驗證工具,可以檢視指定的檔案或目錄下的哪些檔案沒有數字簽名。此工具是命令列工具,可以用來批...
數字簽名的驗證
通常的我們在軟體發布前要對binary dll,exe 進行數字簽名,數字簽名可以標識軟體的發布商,也可以通過數字簽名來檢查此軟體是否被修改或受病毒影響。sigcheck是來自sysinternals的數字簽名驗證工具,可以檢視指定的檔案或目錄下的哪些檔案沒有數字簽名。此工具是命令列工具,可以用來批...