使用Python3進行AES加密和解密 輸入的資料

2022-02-27 07:25:02 字數 2565 閱讀 8992

本科的時候弄過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 python

#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)

aes code

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...