gpt4 book ai didi

Python实现AES加密,解密的两种方法

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 31 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python实现AES加密,解密的两种方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

第一种 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import base64
from Crypto.Cipher import AES
 
 
# 密钥(key), 密斯偏移量(iv) CBC模式加密
 
def AES_Encrypt(key, data):
   vi = '0102030405060708'
   pad = lambda s: s + ( 16 - len (s) % 16 ) * chr ( 16 - len (s) % 16 )
   data = pad(data)
   # 字符串补位
   cipher = AES.new(key.encode( 'utf8' ), AES.MODE_CBC, vi.encode( 'utf8' ))
   encryptedbytes = cipher.encrypt(data.encode( 'utf8' ))
   # 加密后得到的是bytes类型的数据
   encodestrs = base64.b64encode(encryptedbytes)
   # 使用Base64进行编码,返回byte字符串
   enctext = encodestrs.decode( 'utf8' )
   # 对byte字符串按utf-8进行解码
   return enctext
 
 
def AES_Decrypt(key, data):
   vi = '0102030405060708'
   data = data.encode( 'utf8' )
   encodebytes = base64.decodebytes(data)
   # 将加密数据转换位bytes类型数据
   cipher = AES.new(key.encode( 'utf8' ), AES.MODE_CBC, vi.encode( 'utf8' ))
   text_decrypted = cipher.decrypt(encodebytes)
   unpad = lambda s: s[ 0 : - s[ - 1 ]]
   text_decrypted = unpad(text_decrypted)
   # 去补位
   text_decrypted = text_decrypted.decode( 'utf8' )
   return text_decrypted
 
 
key = '0CoJUm6Qyw8W8jud' #自己密钥
data = 'sdadsdsdsfd' #需要加密的内容
AES_Encrypt(key, data)
enctext = AES_Encrypt(key, data)
print (enctext)
text_decrypted = AES_Decrypt(key, enctext)
print (text_decrypted)

第二种 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/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 < length:
       add = (length - count)
       # \0 backspace
       # 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( '0CoJUm6Qyw8W8jud' ) # 初始化密钥
   data = input ( "请输入待加密数据:" ) #
   e = pc.encrypt(data) # 加密
   d = pc.decrypt(e).encode() # 解密
   print ( "加密:" , e)
   print ( "解密:" , d)

以上就是Python实现AES加密,解密的两种方法的详细内容,更多关于Python实现AES加密,解密的资料请关注我其它相关文章! 。

原文链接:https://www.cnblogs.com/aotumandaren/archive/2004/01/13/13761816.html 。

最后此篇关于Python实现AES加密,解密的两种方法的文章就讲到这里了,如果你想了解更多关于Python实现AES加密,解密的两种方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com