web介面之數字簽名

2021-10-10 07:42:17 字數 1360 閱讀 7942

什麼是數字簽名

所謂數字簽名(digital signature)(又稱公鑰數字簽名、電子簽章)是一種類似寫在紙上的普通的物理簽名,

但是使用了公鑰加密領域的技術實現,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,乙個用

於簽名,另乙個用於驗證。

數字簽名的實現

數字簽名的簡單例項是直接利用rsa演算法和傳送方的秘密金鑰。對被簽名的資料進行加密。當接收方收取本塊

密文時,使用傳送方的公開金鑰進行解密,如果能夠還原明文,則根據公開金鑰體制的特點(公開金鑰加密的密文

只能用秘密金鑰解密,秘密金鑰加密的密文只能用公開金鑰解密),可以認為該資料確實來自於希望的傳送方。

介面測試中的數字簽名

在使用http/soap協議傳輸時,簽名作為其中乙個引數,起到鑑權的作用(客戶端的密匙和服務端的密匙匹配)

以及資料防篡改(引數是明文傳輸,將介面引數及密匙生成加密字串,將加密字串作為簽名),因為對整個接

口的引數進行了加密,因此任何乙個引數發生變化那麼簽名驗證及失敗。

弊端:md5加密不可逆,伺服器端必須知道客戶端的介面引數和值,否則簽名驗證便會失敗,一般介面在設計時

客戶端請求引數並不完全已知,那麼就不能用全參加密。

在介面開發過程中,一般通過時間戳+sign作為密匙加密傳輸。

這種情況測試介面時,通過獲取時間戳和拿到sign密匙後,再拼接成乙個字串,再加密這個字串,然後和參

數一起傳輸。

md5時間戳和sign的例子:

import hashlib  # md5加密

import time

sign_key =

'asd123'

# key 作為金鑰

now_time = time.time(

)# 獲取當前時間 這裡獲取的是從2023年1月1日0時0分0秒到現在度過的秒

c_time =

str(now_time)

.split(

'.')[0

]# 獲取.之前的時間戳

sign = c_time + sign_key # 拼接成乙個字串

md5 = hashlib.md5(

)sign_bytes_uft8 = sign.encode(encoding=

'utf-8'

)#進行utf-8編碼

md5.update(sign_bytes_uft8)

sign_md5 = md5.hexdigest(

)#md5加密

print

(sign_md5)

當前時間戳+key加密後,就可以作為引數直接傳輸了

數字簽名簽名概述

數字簽名的技術流程描述 1 傳送者使用摘要演算法對傳送資訊產生資訊摘要 2 傳送者使用自己的私鑰對資訊摘要進行簽名 3 傳送者將資訊本身和已簽名的摘要一起傳送出去 4 接收者使用相同的摘要演算法對資訊本身計算資訊摘要 5 接收者使用傳送者的公鑰對簽名的摘要就行驗籤,獲得資訊傳送者的資訊摘要 6 接收...

數字信封 數字簽名

2019 08 06 19 51 51 數字簽名是用來表明資料傳送者身份的,有了簽名就說明這個資料是傳送都發出來的。為什麼?因為可以用你的公鑰開啟你的簽名資訊,獲取明文的hash值。數字信封,被公鑰加密後的對稱密碼被稱為數字信封,用於對稱金鑰的交換。數字證書,用來證明資料傳送者的身份的。為什麼能證明...

數字簽名技術

在當今高速發展的網路資訊化時代,人們越來越重視資訊的安全性問題,電子資訊內容的安全已經成為倍受關注的問題,數字簽名技術作為資訊保安領域的一項重要技術,應用日益廣泛。論述了數字簽名的作用及實現方法技術,並介紹了當前數字簽名的幾種新技術,展望了這一領域的發展前景。1數字簽名的作用 該技術在具體工作時,首...