python語言基礎?
Python語言誕生于90年代初,早期主要用于做科學計算的研究機構。近年來,由于web、大數據和人工智能的發展,它被廣泛應用于系統管理任務的處理和web編程中,被稱為比較流行的編程語言之一。
Python是用C語言開發的,但是python不再有C語言的指針等復雜的數據類型。python的簡單性大大減少了軟件的代碼,進一步簡化了開發任務。
Python如何玩轉加密?
1、生成公鑰和私鑰對
使用openssl工具生成RSA公鑰和私鑰對。
1.下載openssl工具。下載地址
2.打開openssl文件夾下的bin文件夾,執行openssl.exe文件;
3.生成RSA私鑰命令:
這里生成的密鑰文件是2048位。
genrsa-outrsa_private_2048
4.生成RSA公鑰命令:
注意,公鑰和私鑰是成對的,所以你生成一個后,另一個是基于前一個的文件名生成的,否則就不是一對!!
RSA-inRSA_private_-pubout-outRSA_public_
生成的文件應該在您的用戶目錄中,或者在openssl的bin文件夾中(有時它在這里,有時它它不在那里,這真令人困惑。反正兩個地方都找就行了,肯定是有的)。
5.讓讓我們在這里介紹RSA密鑰文件的規則。文件名都是。pem為后綴,生成的RSA密鑰可以看做全部。
以-beginRSAprivatekey-開始并以-endRSAprivatekey-結束的字符串,沒有換行符,這是原始的RSA私鑰。
第二,安裝—pycryptodome,python支持的加密庫。
我用的是Python版,網上搜了一下。在python3.6之前,大部分版本都是用pycrypto加密的,但是在python3.6之后,因為沒有人維護pycrypto,所以改名為pycryptodome。這個庫的強大之處在于它是pycrypto庫的擴展,使用起來更加方便靈活。
安裝pycryptodome
如果你安裝pip,它這很簡單。
pip3安裝pycryptodom:
無鍵
try:
鑰匙(打開(fn)。r:除外
打印(導入rsa密鑰文件時出錯,fn,:
r:
r:除外
Print(將字符串密鑰轉換為rsa格式密鑰時出錯,skey,err)
返回ret
加密
從進口PKCS1_OA:
密文b
try:
密碼PKCS1_(rsa_key)
密文cipher.encrypt(數據)
:除外
打印(RSA加密失敗,,錯誤)
返回密文
因為RSA在加密過程中只能加密最大長度的字符串,所以如果你加密的數據太長,你需要在加密過程中分段加密。同樣,解密也是分段解密。
1024位證書加密時最多支持117字節,解密時最多支持128字節;
2048位證書在加密時最多支持245字節,在解密時最多支持256字節。
加密時支持的最大字節數:證書位數/8-11(例如:2048位證書,支持的最大加密字節數:2048/8-11-245)。
其中,11個字節為保留字節。
我上面的密鑰文件是2048位,所以加密塊長度是245字節。
4.加密塊
#根據密鑰長度計算塊大小
defget_block_siz:
try:
#RSA只支持有限長度內的數據加密解密,需要分區。
#塊大小block_r:
引發Runtim:
r:除外
Print(計算加密和解密數據塊大小時出錯,rsa_k:
bs獲取塊大小(rsa密鑰)
對于iinrang:
收益率數據[i:ibs]
無論加密中使用的段的大小如何,RSA都會對段進行解密,并根據/8的密鑰長度對其進行解密。
譯
從進口PKCS1_OA:
r:
密碼PKCS1_(rsa_k:除外
打印(RSA解密失敗,,錯誤)
返回ret_data
符號
從導入pkcs1_15
來自Crypto。哈希導入SHA256
#RSA簽名
d:
簽名
try:
h(數據)
簽名pkcs1_(rsa_k:除外
打印(RSA簽名失敗,,錯誤)
返回簽名
檢查簽名
#RSA簽名驗證
定義rsa_sign_v:
嘗試:
h(數據)
pkcs1_(rsa_k:
retFalse
返回ret
加密解密類(我把RSA加密解密封裝成一個類,方便后續直接調用),完整代碼如下:
#-*-coding:utf-8-*-
作為密碼導入
作為符號導入
導入加密。哈希作為哈希
從導入RSA
從導入PKCS1_v1_5作為PKCS1_v1_5_cipper
從導入PKCS1_v1_5作為PKCS1_v1_5_sign
來自Crypto。哈希導入SHA1
Rsa:級
RSA加密和解密簽名類
def__int__(self,ciper_libPKCS1_v1_5_cipper,sign_libPKCS1_v1_5_sign,hash_libSHA1,
pub_fil:
#加密和解密庫
_libcip:
_k:
_k:
_k:
_k:
_k:
_key(打開(pri_file)。read())
#塊保留長度
_反轉_大小反轉sed_size
#根據密鑰長度計算塊大小
defget_block_siz:
try:
#RSA只支持有限長度內的數據加密解密,需要分區。
#塊大小
保留大小反轉大小
密鑰大小rsa__in_bits()
if(k:
引發Runtim:
r:除外
Print(計算加密和解密數據塊大小時出錯,rsa_k:
bs_塊_大小(rsa_k:
收益率數據[i:ibs]
#加密
定義編碼字節(自身,數據,k:
文本b
try:
rsa_k:
rsa_k:
cur_t:除外
打印(RSA加密失敗,數據,錯誤)
返回文本
#解密
定義dec_byt:
文本b
try:
rsa_k:
rsa_k:
如果鍵入(_lib)_OA:
當前文本(日期)
:
Cur_t:除外
打印(RSA解密失敗,數據,錯誤)
返回文本
#RSA簽名
定義符號_字節(自身,數據,k:
簽名
try:
rsa_k:
rsa_k:除外
打印(RSA簽名失敗,,錯誤)
返回簽名
#RSA簽名驗證
定義簽名_驗證(自我,數據,簽名,k:
try:
rsa_k:
rsa_k:
r:
及格
如果__姓名____main__:
主()
