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

python加密解密庫cryptography使用openSSL生成的密匙加密解密

 更新時(shí)間:2020年02月11日 08:58:15   作者:xiaoqingyu123  
這篇文章主要介紹了python加密解密庫cryptography使用openSSL生成的密匙加密解密,需要的朋友可以參考下

密匙使用步驟一般是:

    1. 私匙簽名,發(fā)送簽名后的數(shù)據(jù), 公匙驗(yàn)證。

    2.公匙加密,發(fā)送加密后的數(shù)據(jù),私匙解密。

一般使用情景是通過 openssl 生成密匙后再操作的。Linux下生成密匙也很簡(jiǎn)單。

yum 安裝 openssl

yum -y install openssl

生成三個(gè)密匙文件。

rsa_private_key.pem 私匙文件

rsa_private_key_pkcs8.pem  pkcs8格式私匙, 

rsa_public_key.pem 公匙

openssl genrsa -out rsa_private_key.pem  1024 

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem 

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 

導(dǎo)入私匙:

序列化密鑰可以選擇使用密碼在磁盤上進(jìn)行加密。在這個(gè)例子中,我們加載了一個(gè)未加密的密鑰,因此我們沒有提供密碼。如果密鑰被加密,我們可以傳遞一個(gè)bytes對(duì)象作為 password參數(shù)。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
 
# 已有sar私匙, 導(dǎo)入
with open('Key.pem', 'rb') as key_file:
  private_key = serialization.load_pem_private_key(
    key_file.read(),
    password=None,
    backend=default_backend()
  )

簽名:

私鑰可用于簽署消息。這允許任何擁有公鑰的人驗(yàn)證該消息是由擁有相應(yīng)私鑰的人創(chuàng)建的。RSA簽名需要特定的散列函數(shù),并使用填充。以下是message使用RSA 進(jìn)行簽名的示例,帶有安全散列函數(shù)和填充:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
 
# 已有sar私匙, 導(dǎo)入
with open('Key.pem', 'rb') as key_file:
  private_key = serialization.load_pem_private_key(
    key_file.read(),
    password=None,
    backend=default_backend()
  )
 
message = b"aaaa, bbbb, cccc"
 
# 簽名操作
signature = private_key.sign(
  message,
  padding.PSS(
    mgf=padding.MGF1(hashes.SHA256()),
    salt_length=padding.PSS.MAX_LENGTH
  ),
  hashes.SHA256()
)
print('簽名后數(shù)據(jù): ', signature)

有效的簽名填充是 PSS和 PKCS1v15.PSS 是任何新協(xié)議或應(yīng)用的推薦選擇,PKCS1v15 只應(yīng)用于支持傳統(tǒng)協(xié)議。

如果您的數(shù)據(jù)太大而無法在單個(gè)調(diào)用中傳遞,則可以分別對(duì)其進(jìn)行散列并使用該值 Prehashed。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric import utils
 
# 已有sar私匙, 導(dǎo)入
with open('Key.pem', 'rb') as key_file:
  private_key = serialization.load_pem_private_key(
    key_file.read(),
    password=None,
    backend=default_backend()
  )
 
# 如果您的數(shù)據(jù)太大而無法在單個(gè)調(diào)用中傳遞,則可以分別對(duì)其進(jìn)行散列并使用該值 Prehashed。
 
 
chosen_hash = hashes.SHA256()
hasher = hashes.Hash(chosen_hash, default_backend())
hasher.update(b"data &")
hasher.update(b"more data")
digest = hasher.finalize()
sig = private_key.sign(
  digest,
  padding.PSS(
    mgf=padding.MGF1(hashes.SHA256()),
    salt_length=padding.PSS.MAX_LENGTH
  ),
  utils.Prehashed(chosen_hash)
)
print('簽名后數(shù)據(jù): ', sig)

驗(yàn)證:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
 
# 已有sar私匙, 導(dǎo)入
with open('Key.pem', 'rb') as key_file:
  private_key = serialization.load_pem_private_key(
    key_file.read(),
    password=None,
    backend=default_backend()
  )
 
message = b"123 xiao"
 
# 簽名
signature = private_key.sign(
  # 原始數(shù)據(jù)
  message,
  padding.PSS(
    mgf=padding.MGF1(hashes.SHA256()),
    salt_length=padding.PSS.MAX_LENGTH
  ),
  hashes.SHA256()
)
print('簽名后的數(shù)據(jù): ', signature)
 
 
# 公匙導(dǎo)入
with open('Key_pub.pem', 'rb') as key_file:
  public_key = serialization.load_pem_public_key(
    key_file.read(),
    backend=default_backend()
  )
  
  
# 簽名數(shù)據(jù)與原始數(shù)據(jù)不對(duì),拋出異常
# 如果驗(yàn)證不匹配,verify()會(huì)引發(fā) InvalidSignature異常。
public_key.verify(
  # 簽名數(shù)據(jù)
  signature,
  # 原始數(shù)據(jù)
  message,
  padding.PSS(
    mgf=padding.MGF1(hashes.SHA256()),
    salt_length=padding.PSS.MAX_LENGTH
  ),
  hashes.SHA256()
)

如果您的數(shù)據(jù)太大而無法在單個(gè)調(diào)用中傳遞,則可以分別對(duì)其進(jìn)行散列并使用該值 Prehashed。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric import utils
 
# 已有sar私匙, 導(dǎo)入
with open('Key.pem', 'rb') as key_file:
  private_key = serialization.load_pem_private_key(
    key_file.read(),
    password=None,
    backend=default_backend()
  )
 
chosen_hash = hashes.SHA256()
hasher = hashes.Hash(chosen_hash, default_backend())
hasher.update(b'data &')
hasher.update(b'more data')
digest = hasher.finalize()
sig = private_key.sign(
  digest,
  padding.PSS(
    mgf=padding.MGF1(hashes.SHA256()),
    salt_length=padding.PSS.MAX_LENGTH
  ),
  utils.Prehashed(chosen_hash)
)
print('簽名后的數(shù)據(jù): ', sig)
 
 
# 公匙導(dǎo)入
with open('Key_pub.pem', 'rb') as key_file:
  public_key = serialization.load_pem_public_key(
    key_file.read(),
    backend=default_backend()
  )
 
 
# 如果您的數(shù)據(jù)太大而無法在單個(gè)調(diào)用中傳遞,則可以分別對(duì)其進(jìn)行散列并使用該值 Prehashed。
public_key.verify(
  sig,
  digest,
  padding.PSS(
    mgf=padding.MGF1(hashes.SHA256()),
    salt_length=padding.PSS.MAX_LENGTH
  ),
  utils.Prehashed(chosen_hash)
)

公匙,加密:

因?yàn)槭鞘褂眠M(jìn)行加密的RSA加密有趣的是 公共密鑰,這意味著任何人都可以對(duì)數(shù)據(jù)進(jìn)行加密。數(shù)據(jù)然后使用私鑰解密。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
 
 
# 公匙導(dǎo)入
with open('Key_pub.pem', 'rb') as key_file:
  public_key = serialization.load_pem_public_key(
    key_file.read(),
    backend=default_backend()
  )
 
 
message = b'test data'
ciphertext = public_key.encrypt(
  message,
  padding.OAEP(
    mgf=padding.MGF1(algorithm=hashes.SHA256()),
    algorithm=hashes.SHA256(),
    label=None
  )
)
print('加密數(shù)據(jù): ', ciphertext)

私匙解密公私加密的信息:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
 
 
# 已有sar私匙, 導(dǎo)入
with open('Key.pem', 'rb') as key_file:
  private_key = serialization.load_pem_private_key(
    key_file.read(),
    password=None,
    backend=default_backend()
  )
  
 
plaintext = private_key.decrypt(
  # 加密的信息
  ciphertext,
  padding.OAEP(
    mgf=padding.MGF1(algorithm=hashes.SHA256()),
    algorithm=hashes.SHA256(),
    label=None
  )
)
 
print('解密數(shù)據(jù): ', plaintext)

完整的公匙加密,私匙解密獲取信息。

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
 
 
# 公匙導(dǎo)入
with open('Key_pub.pem', 'rb') as key_file:
  public_key = serialization.load_pem_public_key(
    key_file.read(),
    backend=default_backend()
  )
 
 
message = b'test data'
ciphertext = public_key.encrypt(
  message,
  padding.OAEP(
    mgf=padding.MGF1(algorithm=hashes.SHA256()),
    algorithm=hashes.SHA256(),
    label=None
  )
)
print('加密數(shù)據(jù): ', ciphertext)
 
 
# 已有sar私匙, 導(dǎo)入
with open('Key.pem', 'rb') as key_file:
  private_key = serialization.load_pem_private_key(
    key_file.read(),
    password=None,
    backend=default_backend()
  )
  
 
plaintext = private_key.decrypt(
  # 加密的信息
  ciphertext,
  padding.OAEP(
    mgf=padding.MGF1(algorithm=hashes.SHA256()),
    algorithm=hashes.SHA256(),
    label=None
  )
)
 
print('解密數(shù)據(jù): ', plaintext)

更多關(guān)于python加密解密庫cryptography的使用方法請(qǐng)查看下面的相關(guān)鏈接

相關(guān)文章

  • Python批量刪除只保留最近幾天table的代碼實(shí)例

    Python批量刪除只保留最近幾天table的代碼實(shí)例

    今天小編就為大家分享一篇關(guān)于Python批量刪除只保留最近幾天table的代碼實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 深入討論P(yáng)ython函數(shù)的參數(shù)的默認(rèn)值所引發(fā)的問題的原因

    深入討論P(yáng)ython函數(shù)的參數(shù)的默認(rèn)值所引發(fā)的問題的原因

    這篇文章主要介紹了深入討論P(yáng)ython函數(shù)的參數(shù)的默認(rèn)值所引發(fā)的問題的原因,利用了Python解釋器在內(nèi)存地址分配中的過程解釋了參數(shù)默認(rèn)值帶來陷阱的原因,需要的朋友可以參考下
    2015-03-03
  • Python將xml和xsl轉(zhuǎn)換為html的方法

    Python將xml和xsl轉(zhuǎn)換為html的方法

    這篇文章主要介紹了Python將xml和xsl轉(zhuǎn)換為html的方法,實(shí)例分析了使用libxml2模塊操作xml和xsl轉(zhuǎn)換為html的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 利用OpenCV給彩色圖像添加椒鹽噪聲的方法

    利用OpenCV給彩色圖像添加椒鹽噪聲的方法

    椒鹽噪聲是數(shù)字圖像中的常見噪聲,一般是圖像傳感器、傳輸信道及解碼處理等產(chǎn)生的黑白相間的亮暗點(diǎn)噪聲,椒鹽噪聲常由圖像切割產(chǎn)生,這篇文章主要給大家介紹了關(guān)于利用OpenCV給彩色圖像添加椒鹽噪聲的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • python中l(wèi)ambda與def用法對(duì)比實(shí)例分析

    python中l(wèi)ambda與def用法對(duì)比實(shí)例分析

    這篇文章主要介紹了python中l(wèi)ambda與def用法對(duì)比,實(shí)例分析了lambda與def的區(qū)別與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Python中的with關(guān)鍵字和文件操作方法

    Python中的with關(guān)鍵字和文件操作方法

    在Python編程中,with關(guān)鍵字用于簡(jiǎn)化文件操作流程,包括文件的打開、讀取、寫入和關(guān)閉,它是一個(gè)上下文管理器,確保即使在發(fā)生異常的情況下,文件也能被正確關(guān)閉,釋放系統(tǒng)資源,本文給大家介紹Python中的with關(guān)鍵字和文件操作方法,感興趣的朋友一起看看吧
    2024-10-10
  • pyodps中的apply用法及groupby取分組排序第一條數(shù)據(jù)

    pyodps中的apply用法及groupby取分組排序第一條數(shù)據(jù)

    這篇文章主要介紹了pyodps中的apply用法及groupby取分組排序第一條數(shù)據(jù),問綻放圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-05-05
  • Pandas+openpyxl進(jìn)行Excel處理詳解

    Pandas+openpyxl進(jìn)行Excel處理詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用pandas和openpyxl庫對(duì)多個(gè)Excel文件進(jìn)行多種處理的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-02-02
  • python求numpy中array按列非零元素的平均值案例

    python求numpy中array按列非零元素的平均值案例

    這篇文章主要介紹了python求numpy中array按列非零元素的平均值案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python多進(jìn)程并發(fā)與同步機(jī)制超詳細(xì)講解

    Python多進(jìn)程并發(fā)與同步機(jī)制超詳細(xì)講解

    進(jìn)程(Process),顧名思義,就是進(jìn)行中的程序。有一句話說得好:程序是一個(gè)沒有生命的實(shí)體,只有處理器賦予程序生命時(shí),它才能成為一個(gè)活動(dòng)的實(shí)體。進(jìn)程是資源分配的最小單元,也就是說每個(gè)進(jìn)程都有其單獨(dú)的內(nèi)存空間
    2022-12-12

最新評(píng)論

福鼎市| 宜城市| 巨鹿县| 元氏县| 双峰县| 永德县| 黑龙江省| 汪清县| 开化县| 张家界市| 军事| 会宁县| 会同县| 布拖县| 榕江县| 灌阳县| 万盛区| 色达县| 鄂州市| 枣强县| 奉新县| 新干县| 收藏| 南部县| 平乐县| 家居| 荆门市| 故城县| 花垣县| 崇州市| 康保县| 岳阳县| 专栏| 玉田县| 仁怀市| 嫩江县| 麦盖提县| 潼关县| 邵武市| 垫江县| 琼结县|