python des,aes,rsa加解密的實(shí)現(xiàn)
AES加解密
AES 只是個基本算法,實(shí)現(xiàn) AES 有幾種模式,主要有 ECB、CBC、CFB 和 OFB CTR,直接上代碼,此處為AES加密中的CBC模式,EBC模式與CBC模式相比,不需要iv。
import base64from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
class AES3:
def __init__(self, key):
self.key = key
self.mode = AES.MODE_CBC
self.iv = self.key
def _pad(self, text):
key_len = len(self.key)
pad = text + (key_len - len(text) % key_len) * chr(key_len - len(text) % key_len)
return pad
def _unpad(self, text):
pad = ord(text[-1:])
return text[0:-pad]
# 加密函數(shù)
def encrypt(self, text):
length = 16
count = len(text)
if count % length != 0:
add = length - (count % length)
else:
add = 0
text = text + ('\0' * add)
cryptor = AES.new(self.key.encode("utf8"), self.mode, self.iv.encode("utf8"))
self.ciphertext = cryptor.encrypt(bytes(text, encoding="utf8"))
# AES加密時候得到的字符串不一定是ascii字符集的,輸出到終端或者保存時候可能存在問題,使用base64編碼
return base64.b64encode(b2a_hex(self.ciphertext)).decode('utf-8')
# 解密函數(shù)
def decrypt(self, text):
decode = base64.b64decode(text)
cryptor = AES.new(self.key.encode("utf8"), self.mode, self.iv.encode("utf8"))
plain_text = unpad(cryptor.decrypt(decode))
return a2b_hex(plain_text) .decode('utf8')
RSA公鑰加密,私鑰解密
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
import base64
# 私鑰
private_key = '''-----BEGIN RSA PRIVATE KEY-----
5353dfggd
-----END RSA PRIVATE KEY-----
'''
# 公鑰
public_key = '''-----BEGIN PUBLIC KEY-----
hfgghftetet
-----END PUBLIC KEY-----'''
def rsa_encrypt(message):
"""校驗(yàn)RSA加密 使用公鑰進(jìn)行加密"""
cipher = Cipher_pkcs1_v1_5.new(RSA.importKey(public_key))
cipher_text = base64.b64encode(cipher.encrypt(message.encode())).decode()
return cipher_text
def rsa_decrypt(text):
"""校驗(yàn)RSA加密 使用私鑰進(jìn)行解密"""
cipher = Cipher_pkcs1_v1_5.new(RSA.importKey(private_key))
retval = cipher.decrypt(base64.b64decode(text), 'ERROR').decode('utf-8')
return retval
DES加解密
from pyDes import *
import base64
class Des3(object):
def __init__(self, key, iv):
# 這里密鑰key長度必須為16/24, ,偏移量ivs
self.key = key
self.mode = CBC
self.iv = iv
# 加密函數(shù),如果text不是16的倍數(shù)【加密文本text必須為16的倍數(shù)!】,那就補(bǔ)足為16的倍數(shù)
def encrypt(self, text):
des3 = triple_des(self.key, self.mode, self.iv, pad=None, padmode=PAD_PKCS5)
data = des3.encrypt(text)
data = base64.b64encode(data)
return data.decode('utf-8')
# 解密后,去掉補(bǔ)足的空格用strip() 去掉
def decrypt(self, data):
des3 = triple_des(self.key, self.mode, self.iv, pad=None, padmode=PAD_PKCS5)
data = base64.b64decode(data)
text = des3.decrypt(data)
return text.decode('hex')
以上就是python des,aes,rsa加解密的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于python des,aes,rsa加解密的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)讀取SQLServer數(shù)據(jù)并插入到MongoDB數(shù)據(jù)庫的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)讀取SQLServer數(shù)據(jù)并插入到MongoDB數(shù)據(jù)庫的方法,涉及Python同時進(jìn)行SQLServer與MongoDB數(shù)據(jù)庫的連接、查詢、讀取、寫入等相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06
Python循環(huán)語句之break與continue的用法
這篇文章主要介紹了Python循環(huán)語句之break與continue的用法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10
Python 使用pandas實(shí)現(xiàn)查詢和統(tǒng)計示例詳解
這篇文章主要為大家介紹了Python 使用pandas實(shí)現(xiàn)查詢和統(tǒng)計示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
如何利用Python+Vue實(shí)現(xiàn)簡單的前后端分離
因?yàn)閜ython開發(fā)的高效性,python web開發(fā)也受到越來越多人的關(guān)注,下面這篇文章主要給大家介紹了關(guān)于如何利用Python+Vue實(shí)現(xiàn)簡單的前后端分離的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
Python中使用實(shí)現(xiàn)輸出哈沙德數(shù)的多種方法小結(jié)
哈沙德數(shù)(Harshad?Number),又稱Niven數(shù),是指一個自然數(shù),它可以被它的各位數(shù)字之和整除,本文將探討如何使用多種不同的方法來判斷一個數(shù)字是否是哈沙德數(shù),感興趣的可以了解下2024-01-01

