aes 128位加密 解密

2021-10-05 11:25:10 字數 2235 閱讀 6696

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

import sys

from crypto.cipher import aes

from crypto import random

from binascii import b2a_hex, a2b_hex

class

prpcrypt()

:def

__init__

(self, key)

: self.key = key # key是bytes型別的

self.mode = aes.mode_cbc

self.iv = random.new(

).read(aes.block_size)

print

(self.iv,

'二進位制形式'

)print

(b2a_hex(self.iv)

,'二進位制的十六進製制assicc形式'

)# 加密函式,如果text不是16的倍數【加密文字text必須為16的倍數!】,那就補足為16的倍數

defencrypt

(self, text)

:# text 引數是bytes型別 輸出 也是bytes型別

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 % length !=0:

add = length -

(count % length)

else

: add =

0 text = text +

(b'\0'

* add)

self.ciphertext = cryptor.encrypt(text)

# 因為aes加密時候得到的字串不一定是ascii字符集的,輸出到終端或者儲存時候可能存在問題

# 所以這裡統一把加密後的字串轉化為16進製制字串

result = b2a_hex(self.ciphertext)

# bytes to ascii 形式,hex形式

return result

# 解密後,去掉補足的空格用strip() 去掉

defdecrypt

(self, text)

: cryptor = aes.new(self.key, self.mode, self.iv)

plain_text = cryptor.decrypt(a2b_hex(text)

)return plain_text.rstrip(b'\0'

)if __name__ ==

'__main__'

:# 結論 如何加密,如何解密

mp4_path = r'c:\users\wangcc\desktop\ads_svp_video__0b6bt4aagaaas4amgwefrvpbvhyeaopqaa2a.f40.mp4'

with

open

(mp4_path,

'rb'

)as f:

buf = f.read(

) pc = prpcrypt(b'keyskeyskeyskeys'

)# 初始化金鑰

AES 128 加密補充

for i 0 imemcpy newstr 16 i,out,16 strcat newstr,out return newstr base64 int base64encode char orgstring,char base64string,int orgstringlen else orgs...

aes 128 速度測試

官方 intel advanced encryption standard aes new instructions set.pdf 測試結論 其中ecb 加解密 cbc解密 ctr加解密由於可以並行是cbc加密速度的3 4倍。金鑰擴充套件開銷大約是加密分組的5倍。openssl speed 實測啟...

PHP實現的AES 128位加密演算法示例

加密演算法一般分為兩種 對稱加密演算法和非對稱加密演算法。對稱加密 對稱加密演算法是訊息傳送者和接收者使用同乙個密匙,傳送者使用密匙加密了檔案,接收者使用同樣的密匙解密,獲取資訊。常見的對稱加密演算法有 des aes 3des.對稱加密演算法的特點有 速度快,加密前後檔案大小變化不大,但是密匙的保...