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