注意:
cbc模式中,加密或者解密物件不能被重複使用,即加密了乙個明文之後,不能再用此物件加密其他明文。
key必須為16或24或32個位元組長度。
明文位元組長度必須為16的倍數。
**:
import base64
from django.conf import settings
from utils.vault_util import vaultclient
from cryptodome.cipher import aes
class md5util(object):
@classmethod
def md5(cls, text, clen=none, salt=''):
import hashlib
m2 = hashlib.md5()
m2.update((text + salt).encode('utf-8'))
code = m2.hexdigest()
if clen is none:
return code
elif clen >= len(code):
return code
else:
return code[0:clen]
class aesutil(object):
def __init__(self):
self.key = md5util.md5('my_key_for_encrypt', 16).encode('utf-8')
self.model = aes.mode_cbc
self.iv = b'abcdefgh12345678' #密斯偏移量(iv)
self.e_aes = aes.new(self.key, self.model, self.iv)
self.d_esc = aes.new(self.key, self.model, self.iv)
@classmethod
def add_to_16(cls, b_value):
while len(b_value) % 16 != 0:
b_value += b' '
return b_value
def encrypt_str(self, text):
b_text = self.add_to_16(text.encode('utf-8'))
encrypt_text = self.e_aes.encrypt(b_text)
return base64.encodebytes(encrypt_text).decode('utf-8')
def decrypt_str(self, text):
b_text = base64.decodebytes(text.encode('utf-8'))
decrypt_text = self.d_esc.decrypt(b_text)
return decrypt_text.decode('utf-8').rstrip()
def encrypt_file(self, b_text):
b_text = self.add_to_16(b_text)
encrypt_text = self.e_aes.encrypt(b_text)
return encrypt_text
def decrypt_file(self, b_text):
decrypt_text = self.d_esc.decrypt(b_text)
return decrypt_text.rstrip()
字串加密解密
using system.security.cryptography using system.io 加密函式 static stirng encrypt string str descryptoserviceprovider descsp new descryptoserviceprovider ...
java AES加密解密檔案以及字串
搗鼓了兩個星期的加密解密資料夾,一開始是用異或,後來覺得太簡單換成了aes,結果一堆bug,上網查了很多,現在將這個最終的版本記錄下來。已經在android 5.1系統上測試過,是可以的。初始化 aes cipher param skey param ciphermode return public...
openssl 實現 aes 檔案加密解密
linux 環境 基礎 安裝 openssl 加密用 安裝 python 環境 換金鑰用 bin sh py file zone aes tool py key iv in file out file 獲取金鑰k,向量v,輸入檔案i,輸出檔案o while getopts k v i o opt d...