本科的時候弄過des加密演算法加密計算機檔案,而des加密演算法現在基本處於被廢棄的狀態,所以現在想試試更高階一點的。
des加密演算法可發展為3des加密演算法,後來又被公升級為aes加密演算法,加長了金鑰長度,也就增加了暴力破解的難度。
本次使用python進行aes的加密解密,在ubuntu下進行:
如果沒有安裝python,請先安裝python和pip:
#sudo apt-get install python
#sudo apt-get install python-pip
順便安裝2個庫(有可能不叫庫,乙個是關於加密解密演算法的,另外乙個是關於字元轉換的):
#pip install ctypto
#pip install pycrypto
#pip install pycryptodome
#pip install binascii
aes擁有很多模式,而此次採用的cbc模式:通過金鑰和salt(起擾亂作用)按固定演算法(md5)產生key和iv。然後用key和iv(初始向量,加密第一塊明文)加密(明文)和解密(密文)。
下面**實現的思想:將加密文字處理以8*16位 這樣的單位進行加密,每16個位元組長度的資料加密成16個位元組長度的密文。在下面**中,秘鑰為key,位移為iv。
#!/usr/bin/env pythonaes code#encoding=『utf-8
』from
crypto.cipher import aes
from
binascii import b2a_hex, a2b_hex
from
crypto import random
class prpcrypt(object
): def __init__(self, key):
self.key = key.encode('
utf-8')
self.mode =aes.mode_cbc
self.iv = random.new
().read(aes.block_size)
# 加密函式,如果text不足16位就用空格補足為16位,
# 如果大於16當時不是16的倍數,那就補足為16的倍數。
def encrypt(self, text):
text = text.encode('
utf-8')
cryptor = aes.new
(self.key, self.mode,self.iv)
# 這裡金鑰key 長度必須為16(aes-128
), #
24(aes-192),或者32 (aes-256
)bytes 長度
# 目前aes-128
足夠目前使用
length = 16
count =len(text)
if count
add = (length -count)
# \0backspace
# text = text + ('
\0' *add)
text = text + ('
\0' * add).encode('
utf-8')
elif count >length:
add = (length - (count %length))
# text = text + ('
\0' *add)
text = text + ('
\0' * add).encode('
utf-8')
self.ciphertext =cryptor.encrypt(text)
# 因為aes加密時候得到的字串不一定是ascii字符集的,輸出到終端或者儲存時候可能存在問題
# 所以這裡統一把加密後的字串轉化為16進製制字串
return
b2a_hex(self.ciphertext)
# 解密後,去掉補足的空格用strip() 去掉
def decrypt(self, text):
cryptor = aes.new
(self.key, self.mode, self.iv)
plain_text =cryptor.decrypt(a2b_hex(text))
# return plain_text.rstrip('\0'
)
return bytes.decode(plain_text).rstrip('\0'
)if __name__ == '
__main__':
pc = prpcrypt('
keyskeyskeyskeys
') # 初始化金鑰
data = input("
請輸入待加密資料:")#
e =pc.encrypt(data) # 加密
d =pc.decrypt(e).encode() # 解密
print(
"加密:
", e)
print(
"解密:
", d)
python3實現AES加密
這幾天研究了一下 python 實現 aes 加密,有很多坑 這個 aes 加密的主要坑就在於這些條件,首先 aes 加密有一下幾個引數 秘鑰 加密的時候用秘鑰,解密的時候需要同樣的秘鑰才能解出來 明文 需要加密的引數 模式 aes 加密常用的有 ecb 和 cbc 模式 我只用了這兩個模式,還有其...
Python3實現AES加解密
import base64 from crypto.cipher import aes from urllib.parse import unquote 採用aes對稱加密演算法 str不是16的倍數那就補足為16的倍數 def add to 16 value while len value 16 ...
python3使用 python3使用模組
python內建了很多非常有用的模組,只要安裝完畢,這些模組就可以立刻使用。我們以內建的sys模組為例,編寫乙個hello的模組 usr bin env python3 coding utf 8 a test module author michael liao import sys def tes...