python實現(xiàn)的AES雙向?qū)ΨQ加密解密與用法分析
本文實例講述了python實現(xiàn)的AES雙向?qū)ΨQ加密解密與用法。分享給大家供大家參考,具體如下:
AES只是個基本算法,實現(xiàn)AES有若干模式。其中的CBC模式因為其安全性而被TLS(就是https的加密標(biāo)準(zhǔn))和IPSec(win采用的)作為技術(shù)標(biāo)準(zhǔn)。簡單地說,CBC使用密碼和salt(起擾亂作用)按固定算法(md5)產(chǎn)生key和iv。然后用key和iv(初始向量,加密第一塊明文)加密(明文)和解密(密文)。
下面介紹python實現(xiàn)的AES加密解密實例,這里采用CBC模式,用到了pycrypto模塊
安裝:
pip install Crypto pip install binascii
實現(xiàn):
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@author: rui.xu
#這里使用pycrypto?庫
#按照方法:easy_install pycrypto?
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class prpcrypt():
def __init__(self,key):
self.key = key
self.mode = AES.MODE_CBC
#加密函數(shù),如果text不足16位就用空格補(bǔ)足為16位,
#如果大于16當(dāng)時不是16的倍數(shù),那就補(bǔ)足為16的倍數(shù)。
def encrypt(self,text):
cryptor = AES.new(self.key,self.mode,b'0000000000000000')
#這里密鑰key 長度必須為16(AES-128),
#24(AES-192),或者32 (AES-256)Bytes 長度
#目前AES-128 足夠目前使用
length = 16
count = len(text)
if count < length:
add = (length-count)
#\0 backspace
text = text + ('\0' * add)
elif count > length:
add = (length-(count % length))
text = text + ('\0' * add)
self.ciphertext = cryptor.encrypt(text)
#因為AES加密時候得到的字符串不一定是ascii字符集的,輸出到終端或者保存時候可能存在問題
#所以這里統(tǒng)一把加密后的字符串轉(zhuǎn)化為16進(jìn)制字符串
return b2a_hex(self.ciphertext)
#解密后,去掉補(bǔ)足的空格用strip() 去掉
def decrypt(self,text):
cryptor = AES.new(self.key,self.mode,b'0000000000000000')
plain_text = cryptor.decrypt(a2b_hex(text))
return plain_text.rstrip('\0')
if __name__ == '__main__':
pc = prpcrypt('keyskeyskeyskeys') #初始化密鑰
import sys
e = pc.encrypt(sys.argv[1]) #加密
d = pc.decrypt(e) #解密
print "加密:",e
print "解密:",d
ValueError: IV must be 16 bytes long windows下默認(rèn)會報這個錯,
cryptor = AES.new(self.key,self.mode,b'0000000000000000')
實例化后面加上后面那個就Ok了
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
迅雷、快車、旋風(fēng)URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
關(guān)于自動化測試框架pytest的Fixture固件
這篇文章主要介紹了關(guān)于自動化測試框架pytest的Fixture固件,Fixture它其實就是一些函數(shù),會在執(zhí)行測試方法/測試函數(shù)前后加載運(yùn)行它們,需要的朋友可以參考下2023-03-03
多個python文件調(diào)用logging模塊報錯誤
這篇文章主要介紹了多個python文件調(diào)用logging模塊產(chǎn)生錯誤,需要的朋友可以參考下2020-02-02
python使用pymongo與MongoDB基本交互操作示例
這篇文章主要介紹了python使用pymongo與MongoDB基本交互操作,結(jié)合實例形式詳細(xì)分析了python基于pymongo庫實現(xiàn)與MongoDB基本交互相關(guān)操作技巧與注意事項,需要的朋友可以參考下2020-04-04
Matplotlib與NumPy結(jié)合使用技術(shù)代碼和案例詳解
這篇文章主要介紹了Matplotlib和NumPy的基本使用方法,并通過一些具體的案例展示了如何將它們結(jié)合使用來處理和可視化數(shù)據(jù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12
Python實現(xiàn)的密碼強(qiáng)度檢測器示例
這篇文章主要介紹了Python實現(xiàn)的密碼強(qiáng)度檢測器,結(jié)合實例形式分析了Python密碼強(qiáng)度檢測的原理與實現(xiàn)方法,涉及Python字符串運(yùn)算與轉(zhuǎn)換、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08

