python加密解密

RSA和AES的區別
RSA
非對稱加密,公鑰加密,私鑰解密,反之亦然。由於需要大數的乘冪求模等算法,運行速度慢,不易於硬件實現。
通常私鑰長度有512bit,1024bit,2048bit,4096bit,長度越長,越安全,但是生成密鑰越慢,加解密也越耗時。
既然是加密,那肯定是不希望別人知道我的消息,所以只有我才能解密,所以可得出公鑰負責加密,私鑰負責解密;
同理,既然是簽名,那肯定是不希望有人冒充我發消息,只有我才能發佈這個簽名,所以可得出私鑰負責簽名,公鑰負責驗證。

AES
對稱加密,密鑰最長只有256個bit,執行速度快,易於硬件實現。由於是對稱加密,密鑰需要在傳輸前通訊雙方獲知。
基於以上特點,通常使用RSA來首先傳輸AES的密鑰給對方,然後再使用AES來進行加密通訊。

RSA(加密的內容有長度限制)

#!/usr/bin/env python
#-- coding:utf-8 --
import rsa
import base64

########## 1. 生成公鑰私鑰 #########
pub_key_obj, priv_key_obj = rsa.newkeys(256)
pub_key_str = pub_key_obj.save_pkcs1()
pub_key_code = base64.standard_b64encode(pub_key_str)
priv_key_str = priv_key_obj.save_pkcs1()
priv_key_code = base64.standard_b64encode(priv_key_str)
print(pub_key_code)
print(priv_key_code)

########## 2. 加密 #########
def encrypt(value):
key_str = base64.standard_b64decode(pub_key_code)
pk = rsa.PublicKey.load_pkcs1(key_str)
val = rsa.encrypt(value.encode(‘utf-8’), pk)
return val

########## 3. 解密 #########
def decrypt(value):
key_str = base64.standard_b64decode(priv_key_code)
pk = rsa.PrivateKey.load_pkcs1(key_str)
val = rsa.decrypt(value, pk)
return val

########## 基本使用 #########
if name == ‘main’:
v = ‘wupeiqi’
v1 = encrypt(v)
print(v1)
v2 = decrypt(v1)
print(v2)

AES

from Crypto.Cipher import AES
#安裝pip3 install pycryptodome

def encrypt(message):
key = b’dfdsdfsasdfdsdfs’
cipher = AES.new(key, AES.MODE_CBC, key)
by_data = bytearray(message, encoding=‘utf-8’)
# bytearray是bytes列表類型,可以修改,bytes類型不可修改
v1 = len(bytes(message, encoding=‘utf-8’))
v2 = v1 % 16
if v2 == 0:
v3 = 16
else:
v3 = 16 - v2
for i in range(v3):
by_data.append(v3)
# bytearray只能追加數字進去,這兒追加進數字佔一個字節
final_data = by_data.decode(‘utf-8’)
final_data = bytes(final_data, encoding=‘utf-8’)
msg = cipher.encrypt(final_data)
# 加密 要加密的字符串,必須是16個字節或16個字節的倍數
return msg

def decrypt(msg):
key = b’dfdsdfsasdfdsdfs’
cipher = AES.new(key, AES.MODE_CBC, key)
result = cipher.decrypt(msg)
# 解密
data = result[0:-result[-1]]
return str(data, encoding=‘utf-8’)

v = ‘我是你爸’ # 這裏傳進去的值只能是字符串形式的值
msg = encrypt(v)
result = decrypt(msg)
print(result)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章