亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中RSA加解密與數(shù)字簽名技術(shù)的使用

 更新時(shí)間:2025年03月18日 08:55:44   作者:jay丿  
本文將詳細(xì)介紹 RSA 數(shù)字簽名的原理、實(shí)現(xiàn)步驟,以及如何通過 Python 的 rsa 庫完成公鑰私鑰生成、數(shù)字簽名和認(rèn)證,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

RSA加解密與數(shù)字簽名技術(shù)詳解

  • 在互聯(lián)網(wǎng)通信中,數(shù)據(jù)的安全性至關(guān)重要。
  • 為了防止數(shù)據(jù)在傳輸過程中被篡改或偽造,數(shù)字簽名技術(shù)應(yīng)運(yùn)而生。
  • RSA 是一種廣泛使用的非對稱加密算法,它不僅可以用于數(shù)據(jù)加密和解密,還可以用于數(shù)字簽名和認(rèn)證。

一、RSA 數(shù)字簽名概述

1. 什么是數(shù)字簽名?

  • 數(shù)字簽名是一種用于驗(yàn)證數(shù)據(jù)完整性和來源的技術(shù)。
  • 它類似于現(xiàn)實(shí)生活中的簽名,但具有更高的安全性和不可抵賴性。
  • 通過數(shù)字簽名,接收方可以確認(rèn)數(shù)據(jù)在傳輸過程中未被篡改,并且確實(shí)來自聲稱的發(fā)送方。

2. RSA 數(shù)字簽名的原理

RSA 數(shù)字簽名基于非對稱加密算法,使用一對密鑰:公鑰和私鑰。

  • 私鑰:用于簽名數(shù)據(jù),只有擁有私鑰的人才能生成有效的簽名。
  • 公鑰:用于驗(yàn)證簽名,任何人都可以使用公鑰驗(yàn)證簽名的有效性。

簽名過程:

  1. 發(fā)送方使用私鑰對數(shù)據(jù)的哈希值進(jìn)行加密,生成簽名。
  2. 發(fā)送方將數(shù)據(jù)和簽名一起發(fā)送給接收方。

驗(yàn)證過程:

  1. 接收方使用公鑰對簽名進(jìn)行解密,得到數(shù)據(jù)的哈希值。
  2. 接收方重新計(jì)算數(shù)據(jù)的哈希值,并與解密得到的哈希值進(jìn)行比較。
  3. 如果兩個(gè)哈希值相同,則簽名有效,數(shù)據(jù)未被篡改。

二、安裝 rsa 庫

  • 在 Python 中,我們可以使用 rsa 庫來實(shí)現(xiàn) RSA 加解密和數(shù)字簽名。
  • 首先,需要安裝該庫:
pip install rsa

三、生成 RSA 公鑰和私鑰

  • 在使用 RSA 數(shù)字簽名之前,需要生成一對公鑰和私鑰。
  • 以下是生成公鑰和私鑰的示例代碼:
import rsa
from pathlib import Path

# 定義存儲(chǔ)路徑
BASE_DIR = Path(__file__).parent

# 生成公鑰、私鑰對象
public_key, private_key = rsa.newkeys(2048)

# 獲取公鑰對應(yīng)的流數(shù)據(jù)
bpub_key = public_key.save_pkcs1()

# 獲取私鑰對應(yīng)的流數(shù)據(jù)
bpri_key = private_key.save_pkcs1()

# 將公鑰存儲(chǔ)到文件中
with open(BASE_DIR / 'rsa/public.pem', "wb") as f:
    f.write(bpub_key)

# 將私鑰存儲(chǔ)到文件中
with open(BASE_DIR / 'rsa/private.pem', "wb") as f:
    f.write(bpri_key)

代碼說明

生成密鑰對

  • rsa.newkeys(2048):生成 2048 位的公鑰和私鑰。

保存密鑰

  • save_pkcs1():將密鑰對象轉(zhuǎn)換為 PKCS#1 格式的字節(jié)流。
  • 將公鑰和私鑰分別保存到 public.pemprivate.pem 文件中。

四、使用 RSA 私鑰進(jìn)行數(shù)字簽名

  • 生成密鑰對后,可以使用私鑰對數(shù)據(jù)進(jìn)行簽名。
  • 以下是簽名的示例代碼:
import rsa
from pathlib import Path

# 定義存儲(chǔ)路徑
BASE_DIR = Path(__file__).parent

# 加載私鑰
with open(BASE_DIR / 'rsa/private.pem', 'rb') as f:
    private_key = rsa.PrivateKey.load_pkcs1(f.read())

# 定義要簽名的字符串
message = "pwd=123&pk=1"

# 簽名,并獲取簽名后的流數(shù)據(jù)
sign_bytes = rsa.sign(message.encode(), private_key, "SHA-1")

# 獲取簽名字符串表示形式
sign_text = sign_bytes.hex()

print(f"簽名: {sign_text}")

代碼說明

加載私鑰

  • rsa.PrivateKey.load_pkcs1():從文件中加載私鑰。

簽名數(shù)據(jù)

  • rsa.sign():使用私鑰對數(shù)據(jù)進(jìn)行簽名。
  • 簽名算法為 SHA-1,可以根據(jù)需要選擇其他哈希算法。

獲取簽名字符串

  • sign_bytes.hex():將簽名字節(jié)流轉(zhuǎn)換為十六進(jìn)制字符串表示。

五、使用 RSA 公鑰進(jìn)行數(shù)字認(rèn)證

  • 接收方收到數(shù)據(jù)和簽名后,可以使用公鑰驗(yàn)證簽名的有效性。
  • 以下是認(rèn)證的示例代碼:
import rsa
from pathlib import Path

# 定義存儲(chǔ)路徑
BASE_DIR = Path(__file__).parent

# 加載公鑰
with open(BASE_DIR / 'rsa/public.pem', 'rb') as f:
    public_key = rsa.PublicKey.load_pkcs1(f.read())

# 定義要認(rèn)證的字符串
message = "pwd=123&pk=1"

# 獲取數(shù)字簽名(上一步返回的結(jié)果)
sign_text = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # 替換為實(shí)際的簽名

# 使用公鑰進(jìn)行認(rèn)證
try:
    hasher = rsa.verify(message.encode(), bytes.fromhex(sign_text), public_key)
    
    if hasher == "SHA-1":
        print("認(rèn)證成功")
except rsa.VerificationError:
    print("認(rèn)證失敗")

代碼說明

加載公鑰

  • rsa.PublicKey.load_pkcs1():從文件中加載公鑰。

驗(yàn)證簽名

  • rsa.verify():使用公鑰驗(yàn)證簽名的有效性。
  • 如果簽名有效,返回使用的哈希算法(如 SHA-1)。
  • 如果簽名無效,拋出 rsa.VerificationError 異常。

六、數(shù)字簽名的應(yīng)用場景

數(shù)字簽名在以下場景中具有重要作用:

  1. 數(shù)據(jù)完整性驗(yàn)證:確保數(shù)據(jù)在傳輸過程中未被篡改。
  2. 身份認(rèn)證:驗(yàn)證數(shù)據(jù)的來源,防止偽造。
  3. 不可否認(rèn)性:發(fā)送方無法否認(rèn)其發(fā)送的數(shù)據(jù)。

七、注意事項(xiàng)

密鑰管理

  • 私鑰必須妥善保管,避免泄露。
  • 公鑰可以公開分發(fā)。

哈希算法選擇

  • 示例中使用了 SHA-1 算法,但在實(shí)際應(yīng)用中,建議使用更安全的哈希算法,如 SHA-256。

異常處理

  • 在驗(yàn)證簽名時(shí),應(yīng)捕獲 rsa.VerificationError 異常,以處理認(rèn)證失敗的情況。

總結(jié)

本文介紹了 RSA 數(shù)字簽名的原理、實(shí)現(xiàn)步驟,以及如何通過 Python 的 rsa 庫完成公鑰私鑰生成、數(shù)字簽名和認(rèn)證。

RSA 數(shù)字簽名是一種強(qiáng)大的安全工具,可以有效保障數(shù)據(jù)的完整性和來源的真實(shí)性。

在實(shí)際應(yīng)用中,我們應(yīng)結(jié)合具體需求,選擇合適的密鑰長度和哈希算法,并妥善管理密鑰,以確保系統(tǒng)的安全性。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入淺析Pytorch中stack()方法

    深入淺析Pytorch中stack()方法

    這篇文章主要介紹了Pytorch中stack()方法的總結(jié)及理解,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Python實(shí)現(xiàn)手繪圖效果實(shí)例分享

    Python實(shí)現(xiàn)手繪圖效果實(shí)例分享

    在本篇文章里小編給大家整理了關(guān)于Python實(shí)現(xiàn)手繪圖效果,有需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • python連接遠(yuǎn)程ftp服務(wù)器并列出目錄下文件的方法

    python連接遠(yuǎn)程ftp服務(wù)器并列出目錄下文件的方法

    這篇文章主要介紹了python連接遠(yuǎn)程ftp服務(wù)器并列出目錄下文件的方法,實(shí)例分析了Python使用pysftp模塊的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • python實(shí)現(xiàn)登錄密碼重置簡易操作代碼

    python實(shí)現(xiàn)登錄密碼重置簡易操作代碼

    這篇文章主要介紹了python實(shí)現(xiàn)登錄密碼重置簡易操作,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • 關(guān)于python函數(shù)的建立、調(diào)用、傳參、返回值詳解

    關(guān)于python函數(shù)的建立、調(diào)用、傳參、返回值詳解

    這篇文章主要介紹了關(guān)于python函數(shù)的建立、調(diào)用、傳參、返回值詳解,Python?還支持自定義函數(shù),即將一段有規(guī)律的、可重復(fù)使用的代碼定義成函數(shù),從而達(dá)到一次編寫多次調(diào)用的目的,需要的朋友可以參考下
    2023-07-07
  • Python isalnum()函數(shù)的具體使用

    Python isalnum()函數(shù)的具體使用

    本文主要介紹了Python isalnum()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python操作word文檔插入圖片和表格的實(shí)例演示

    Python操作word文檔插入圖片和表格的實(shí)例演示

    這篇文章主要給大家介紹了關(guān)于Python操作word文檔插入圖片和表格的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python使用reportlab將目錄下所有的文本文件打印成pdf的方法

    Python使用reportlab將目錄下所有的文本文件打印成pdf的方法

    這篇文章主要介紹了Python使用reportlab將目錄下所有的文本文件打印成pdf的方法,涉及reportlab模塊操作pdf文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • python+pyqt5實(shí)現(xiàn)KFC點(diǎn)餐收銀系統(tǒng)

    python+pyqt5實(shí)現(xiàn)KFC點(diǎn)餐收銀系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python+pyqt5實(shí)現(xiàn)KFC點(diǎn)餐收銀系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python Django模板系統(tǒng)詳解

    Python Django模板系統(tǒng)詳解

    這篇文章主要介紹Django模板系統(tǒng)Django模板系統(tǒng)的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11

最新評論