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

python?中的pycrypto?算法加密

 更新時間:2022年04月29日 11:49:32   作者:autofelix  
這篇文章主要介紹了python?中的pycrypto?算法加密,文章基于python的相關資料展開對pycrypto?算法加密的詳細介紹,需要的小伙伴可以參考一下

一、安裝

  • pycryto能實現(xiàn)大致3種類型的數(shù)據(jù)加密(單向加密、對稱加密 和非對稱加密),產生隨機數(shù),生成密鑰對,數(shù)字簽名
  • 單向加密:Crypto.Hash,其中中包含MD5、SHA1、SHA256等
  • 對稱加密:Crypto.Cipher,如常見的DES等
  • 非對稱加密:Crypto.Cipher,如常見的AES加密等
  • 隨機數(shù)操作:Crypto.Random,也可以使用Python內置的random模塊和secrets模塊產生
  • 數(shù)字簽名與驗簽:可能需要使用到 Crypto.PublicKey,Crypto.Hash,Crypto.Signature
pip install pycryto

二、AES 加密解密

  • 可以使用 AES.new(key, Mode, IV) 進行加密設置
  • key:長度必須是16、24、或32位
  • VI:長度只能是16位
  • 解密時必須要知道加密時使用的key和IV,再通過decrypt()方法進行解密
from Crypto.Cipher import AES
# 加密
aes = AES.new('this is a key 11', AES.MODE_CBC, 'this is a iv 222')
string = 'autofelix is god'
# encrypt()方法要求被加密的字符串必須也是16、24或32位的長度;所以一般要對被加密串進行處理
result = aes.encrypt(string)
# 解密
aes.decrypt(result)

三、SHA加密

from Crypto.Hash import SHA256
hash = SHA256.new()
hash.update('Hello, World!')
# 使用digest()方法加密
digest = hash.digest()
# 使用hexdigest()方法加密,該方法加密后是16進制的
hexdigest = hash.hexdigest()
print(digest, hexdigest)

四、RSA算法生成密鑰對

  • RSA是一種公鑰密碼算法
  • RSA的密文是對代碼明文的數(shù)字的 E 次方求mod N 的結果。也就是將明文和自己做E次乘法,然后再將其結果除以 N 求余數(shù),余數(shù)就是密文。RSA是一個簡潔的加密算法。E 和 N 的組合就是公鑰
  • 對于RSA的解密,即密文的數(shù)字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再對結果除以 N 求余數(shù)即可得到明文。D 和 N 的組合就是私鑰
from Crypto import Random
from Crypto.PublicKey import RSA
# 獲取一個偽隨機數(shù)生成器
random_generator = Random.new().read
# 獲取一個rsa算法對應的密鑰對生成器實例
rsa = RSA.generate(1024, random_generator)
# 生成私鑰并保存
private_pem = rsa.exportKey()
with open('rsa.key', 'w') as f:
f.write(private_pem)
# 生成公鑰并保存
public_pem = rsa.publickey().exportKey()
with open('rsa.pub', 'w') as f:
f.write(public_pem)
# 私鑰 rsa.key 結果大概如下
# -----BEGIN RSA PRIVATE KEY-----
# MIICXQIBAAKBgQDR4Wq9l44lw/thTPyFmSi2hII92EPh90yGXQNL5e7zJPD16j6Q
# # tr+tIPNSQaVrnmNwrtqyEC2x4Meyp3tdCWPYUF11r2GgDgxKfUByetNG4XqJeUKk
# kJ6D6C706mTf/2zsm8KFoNYCYPX1GhvpiTOikHcNlHLCnOD7jbMAovJg/QIDAQAB
# AoGBAIz8V6+0NxC3bg4WoSs9j1PL/5F7zV3lucoogSZi9vjuP89x40Vi/a9XCxye
# bHi2lSYEz3P92jQ7QuqIBx6gSCi3p2HLjD5LyQeSSMbPe8KSlf52dBUaPthbBceA
# IJSBDrE8MKGpulTQKAJ7K3zQUOP2ZZgcKxq2jcQgS6iTENIBAkEA5r7emvwuL0Ob
# Maav4o1Ovb5c6OL7bSm1tuLPSKl05WuNYfE6LkqiwOOn5lPvsqhwyI1dJeywVeQz
# E+PvcTUR7QJBAOjZ8PxnP5T14fuhbfko4d24Ev+iiTBdq3pMXWvobEFL1ljV6aYE
# 2JAiMjO/Fzd1WgZhWPa3P+diyTs9mART6VECQQC0LeEXdsn9oDYEbFu1dZBB++8C
# 75NTJ5m8iJlB7QjZyMUq8Ln0wdUa9+n4ohxvDraa9EADSDJdr4bvBjLH3J/1AkBr
# 9QfO7kvDU5DXqoujVnoJ4xsj3IbAnt0vEZLKwfLW/0M84si2SU7i3IfsB+/KraT0
# ilPF50ZAkEN+LNt7PjBRAkAHBBPME7IbFqxi5Cc/6R12DOMiJbOLDTS12b1J1cwG
# p8WMIERsvwWdJw+4NdqjbJcjzeGrXhDBi//JU902TAwy
# -----END RSA PRIVATE KEY-----
# 公鑰 rsa.pub 結果大概如下
# -----BEGIN PUBLIC KEY-----
# # MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDR4Wq9l44lw/thTPyFmSi2hII9
# 2EPh90yGXQNL5e7zJPD16j6Qtr+tIPNSQaVrnmNwrtqyEC2x4Meyp3tdCWPYUF11
# r2GgDgxKfUByetNG4XqJeUKkkJ6D6C706mTf/2zsm8KFoNYCYPX1GhvpiTOikHcN
# lHLCnOD7jbMAovJg/QIDAQAB
# -----END PUBLIC KEY-----

五、使用密鑰對加密解密

  • 通常通信的時候,發(fā)送者使用接受者的公鑰加密,接受者使用接受者私鑰解密
import cgi, base64
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
import hashlib
# 要加密的字符串
message = 'autofelix is god'
# 使用公鑰對內容進行 rsa 加密
with open('rsa.pub') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
cipher_text = base64.b64encode(cipher.encrypt(message))
print(cipher_text)
# 使用私鑰對內容進行 rsa 解密
with open('rsa.key') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
text = cipher.decrypt(base64.b64decode(encrypt_text), random_generator)
print(text)

六、加簽和驗簽

import datetime, random
import requests
import hashlib
import json, base64
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from Crypto.Cipher import AES
# 加簽
def sign(signflag,keypath,baseRequest):
# http請求body
print(baseRequest)
# 加簽標志
if not signflag:
return baseRequest
else:
# 取請求體中的業(yè)務數(shù)據(jù)
businessdata = json.dumps(baseRequest["data"])
# 讀取私鑰(.key格式,可使用openssl或java.keytools產生)
with open(keypath,'r') as rsaKeyFile:
rsaKey = rsaKeyFile.read().replace("\n",'')
print(rsaKey)
rsaKeyBytes = base64.b64decode(rsaKey)
print(rsaKeyBytes)
# SHA256摘要,RSA加密
priKey = RSA.importKey(rsaKeyBytes)
signer = PKCS1_v1_5.new(priKey)
hash_obj = SHA256.new(business_data.encode('utf-8'))
signature = base64.b64encode(signer.sign(hash_obj))
print(signature)
# 把簽名加進請求體并返回
baseRequest['sign'] = signature.decode()
print(baseRequest)
return baseRequest
# 驗簽
def validata(signflag,cerpath,res):
if not signflag:
return res
else:
# 取業(yè)務數(shù)據(jù)和簽名
data = res['data']
sign = res['sign']
# 此處cer已轉換成pem格式,使用openssl工具
# openssl x509 -inform der -pubkey -noout -in xxxxx.cer>xxxxx.pem
cert = open(cerpath).read().replace("-----BEGIN PUBLIC KEY-----\n","").replace("-----END PUBLIC KEY-----\n","").replace("\n","")
print(cert)
# 驗簽邏輯同加簽
pubBytes = base64.b64decode(cert)
pubKey = RSA.importKey(pubBytes)
signer = SHA256.new(json.dumps(data).encode("utf-8"))
verifier = PKCS1_v1_5.new(pubKey)
return verifier.verify(signer,base64.b64decode(sign))

到此這篇關于python 中的pycrypto 算法加密的文章就介紹到這了,更多相關pycrypto 算法加密內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python locust工具使用詳解

    Python locust工具使用詳解

    這篇文章主要介紹了Python locust工具使用詳解,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03
  • pycharm中如何自定義設置通過“ctrl+滾輪”進行放大和縮小實現(xiàn)方法

    pycharm中如何自定義設置通過“ctrl+滾輪”進行放大和縮小實現(xiàn)方法

    這篇文章主要介紹了pycharm中如何自定義設置通過“ctrl+滾輪”進行放大和縮小實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Python使用ffmpeg合成視頻、音頻的實現(xiàn)方法

    Python使用ffmpeg合成視頻、音頻的實現(xiàn)方法

    這篇文章主要介紹了Python使用ffmpeg合成視頻、音頻,通過本文的學習能幫助大家了解如何在python中調用ffmpeg模塊,對此進行音視頻合并,完成視頻合成,需要的朋友可以參考下
    2022-04-04
  • Python學習之異常中的finally使用詳解

    Python學習之異常中的finally使用詳解

    這篇文章主要為大家介紹一下Python異常語法中的另一個成員—finally,通過學習finally,可以幫助我們更好的處理異常,快來跟隨小編一起學習一下吧
    2022-03-03
  • Python 網(wǎng)絡編程之TCP客戶端/服務端功能示例【基于socket套接字】

    Python 網(wǎng)絡編程之TCP客戶端/服務端功能示例【基于socket套接字】

    這篇文章主要介紹了Python 網(wǎng)絡編程之TCP客戶端/服務端功能,結合實例形式分析了Python使用socket套接字實現(xiàn)TCP協(xié)議下的客戶端與服務器端數(shù)據(jù)傳輸操作技巧,需要的朋友可以參考下
    2019-10-10
  • pycharm調試時顯示圖片問題的解決

    pycharm調試時顯示圖片問題的解決

    這篇文章主要介紹了pycharm調試時顯示圖片問題的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Python?pandas的八個生命周期總結

    Python?pandas的八個生命周期總結

    這篇文章主要從八個pandas的數(shù)據(jù)處理生命周期,整理匯總出pandas框架在整個數(shù)據(jù)處理過程中都是如何處理數(shù)據(jù)的,感興趣的小伙伴可以了解一下
    2022-10-10
  • 使用Python模塊進行數(shù)據(jù)處理的詳細步驟

    使用Python模塊進行數(shù)據(jù)處理的詳細步驟

    Python 提供了豐富的模塊和庫,用于處理各種類型的數(shù)據(jù),本文介紹了一些常用的模塊和庫,以及如何使用它們進行數(shù)據(jù)處理的詳細步驟和代碼示例,對我們的學習或工作有一定的幫助,需要的朋友可以參考下
    2025-02-02
  • Python學習開發(fā)之圖形用戶界面詳解

    Python學習開發(fā)之圖形用戶界面詳解

    當前流行的計算機桌面應用程序大多數(shù)為圖形化用戶界面(Graphic User Interface,GUI),python也提供了多個圖形開發(fā)界面的庫,這篇文章主要給大家介紹了關于Python學習開發(fā)之圖形用戶界面的相關資料,需要的朋友可以參考下
    2021-08-08
  • python 刪除字符串中連續(xù)多個空格并保留一個的方法

    python 刪除字符串中連續(xù)多個空格并保留一個的方法

    今天小編就為大家分享一篇python 刪除字符串中連續(xù)多個空格并保留一個的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論

绥滨县| 孟州市| 娄烦县| 苏州市| 乐亭县| 墨竹工卡县| 濮阳市| 新化县| 甘孜| 仪陇县| 绿春县| 木兰县| 固镇县| 六安市| 民乐县| 青铜峡市| 青铜峡市| 安陆市| 扬中市| 简阳市| 桑日县| 霍州市| 田林县| 固始县| 邹平县| 通江县| 九寨沟县| 探索| 桓台县| 霍山县| 古丈县| 安岳县| 连江县| 雅安市| 五常市| 任丘市| 宁乡县| 增城市| 荔波县| 柞水县| 松阳县|