pycrypto實現AES加密和解密

2021-08-11 03:51:00 字數 2032 閱讀 2417

一 **

# -*- coding: utf-8 -*-

import string

import random

from crypto.cipher import aes

def keygenerater(length):

'''生成指定長度的秘鑰'''

if length not in (16, 24, 32):

return none

x = string.ascii_letters+string.digits

return ''.join([random.choice(x) for i in range(length)])

def encryptor_decryptor(key, mode):

return aes.new(key, mode, b'0000000000000000')

#使用指定金鑰和模式對給定資訊進行加密

def aesencrypt(key, mode, text):

encryptor = encryptor_decryptor(key, mode)

return encryptor.encrypt(text)

#使用指定金鑰和模式對給定資訊進行解密

def aesdecrypt(key, mode, text):

decryptor = encryptor_decryptor(key, mode)

return decryptor.decrypt(text)

if __name__ == '__main__':

text = 'python3.5 is excellent.'

key = keygenerater(16)

#隨機選擇aes的模式

mode = random.choice((aes.mode_cbc, aes.mode_cfb, aes.mode_ecb, aes.mode_ofb))

if not key:

print('something is wrong.')

else:

print('key:', key)

print('mode:', mode)

print('before encryption:', text)

#明文必須以位元組串形式,且長度為16的倍數

text_encoded = text.encode()

text_length = len(text_encoded)

padding_length = 16 - text_length%16

text_encoded = text_encoded + b'0'*padding_length

text_encrypted = aesencrypt(key, mode, text_encoded)

print('after encryption:', text_encrypted)

text_decrypted =aesdecrypt(key, mode, text_encrypted)

print('after decryption:', text_decrypted.decode()[:-padding_length])

二 執行結果

e:\python\python可以這樣學\第18章 密碼學程式設計\code>python aes_test.py

('key:', 'd5pco6iu0hibj3i2')

('mode:', 1)

('before encryption:', 'python3.5 is excellent.')

('after encryption:', '\xf4\x15\x9f\xaf\xea\xd0\n\x03\xfdf\xf6}9\xaa\xa34\xb4\x1el2\x0e \x16\xa5 \xff?\x8ba\x8e\xdd\xa8')

('after decryption:', u'python3.5 is excellent.')

AES加密 JAVA實現

aes是常用的對稱加密技術,比des有更高的安全性。在寫cp abe系統的時間使用aes加密密文檔案,abe加密了乙個element jpbc庫 屬於常見的加密體制。下面 的aes,乙個是以檔案流的形式加密檔案,乙個是直接加密字串 public class aes destfile.createne...

python encrypt 實現AES加密

aes加密方式有五種 ecb,cbc,ctr,cfb,ofb 從安全性角度推薦cbc演算法 windows 下安裝 pip install pycryptodome linux 下安裝 pip install pycrypto cbc加密需要乙個十六位的key 和乙個十六位的iv 偏移量 ecb加密...

openSSL實現AES加密

openssl是很常見的c介面的庫,個人覺得易用。以下是aescbc cfb ecb加密方式的用法都是類似的,只是函式名有點區別,就不一一枚舉了。一 介面簡介 設定加密金鑰,使用字元緩衝區 intaes set encrypt key const unsigned char userkey,cons...