最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

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

簽名過(guò)程:

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

驗(yàn)證過(guò)程:

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

二、安裝 rsa 庫(kù)

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

三、生成 RSA 公鑰和私鑰

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

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

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

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

# 獲取私鑰對(duì)應(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)

代碼說(shuō)明

生成密鑰對(duì)

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

保存密鑰

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

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

  • 生成密鑰對(duì)后,可以使用私鑰對(duì)數(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}")

代碼說(shuō)明

加載私鑰

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

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

  • rsa.sign():使用私鑰對(duì)數(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)證失敗")

代碼說(shuō)明

加載公鑰

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

驗(yàn)證簽名

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

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

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

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

七、注意事項(xiàng)

密鑰管理

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

哈希算法選擇

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

異常處理

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

總結(jié)

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

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

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

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

相關(guān)文章

  • python opencv根據(jù)顏色進(jìn)行目標(biāo)檢測(cè)的方法示例

    python opencv根據(jù)顏色進(jìn)行目標(biāo)檢測(cè)的方法示例

    這篇文章主要介紹了python opencv根據(jù)顏色進(jìn)行目標(biāo)檢測(cè)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Python實(shí)現(xiàn)單詞翻譯功能

    Python實(shí)現(xiàn)單詞翻譯功能

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)單詞翻譯功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 人工智能學(xué)習(xí)Pytorch張量數(shù)據(jù)類型示例詳解

    人工智能學(xué)習(xí)Pytorch張量數(shù)據(jù)類型示例詳解

    這篇文章主要為大家介紹了人工智能學(xué)習(xí)Pytorch張量數(shù)據(jù)類型的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • 速記Python布爾值

    速記Python布爾值

    這篇文章主要介紹了速記Python布爾值,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • python利用smtplib實(shí)現(xiàn)QQ郵箱發(fā)送郵件

    python利用smtplib實(shí)現(xiàn)QQ郵箱發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了python利用smtplib實(shí)現(xiàn)QQ郵箱發(fā)送郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • opencv實(shí)現(xiàn)圖像校正

    opencv實(shí)現(xiàn)圖像校正

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)圖像校正,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • python 網(wǎng)絡(luò)編程常用代碼段

    python 網(wǎng)絡(luò)編程常用代碼段

    這篇文章主要介紹了python 網(wǎng)絡(luò)編程常用代碼段,需要的朋友可以參考下
    2016-08-08
  • Python判斷一個(gè)數(shù)是否為質(zhì)數(shù)的3種方法(超詳細(xì))

    Python判斷一個(gè)數(shù)是否為質(zhì)數(shù)的3種方法(超詳細(xì))

    一個(gè)大于1的自然數(shù),除了1和它本身外,不能被其他自然數(shù)(質(zhì)數(shù))整除(2, 3, 5, 7等),換句話說(shuō)就是該數(shù)除了1和它本身以外不再有其他的因數(shù),下面這篇文章主要給大家介紹了關(guān)于利用Python判斷一個(gè)數(shù)是否為質(zhì)數(shù)的3種方法,需要的朋友可以參考下
    2024-09-09
  • Python?第三方opencv庫(kù)實(shí)現(xiàn)圖像分割處理

    Python?第三方opencv庫(kù)實(shí)現(xiàn)圖像分割處理

    這篇文章主要介紹了Python?第三方opencv庫(kù)實(shí)現(xiàn)圖像分割處理,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • Python面向?qū)ο笾惡蛯?duì)象實(shí)例詳解

    Python面向?qū)ο笾惡蛯?duì)象實(shí)例詳解

    這篇文章主要介紹了Python面向?qū)ο笾惡蛯?duì)象,結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο笙嚓P(guān)的繼承、多態(tài)、類及對(duì)象等概念、原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-12-12

最新評(píng)論

铁岭县| 北流市| 梁山县| 隆子县| 浪卡子县| 黄浦区| 柳江县| 黄龙县| 宝应县| 沙坪坝区| 霍山县| 蒙阴县| 龙岩市| 衡阳县| 朔州市| 平潭县| 肇州县| 萍乡市| 南和县| 浦北县| 陇西县| 富锦市| 兴海县| 台湾省| 通道| 栾城县| 海伦市| 澳门| 固镇县| 江达县| 泰宁县| 镇巴县| 寿光市| 阿合奇县| 曲麻莱县| 色达县| 东辽县| 尉犁县| 宁安市| 许昌县| 阜新市|