python模擬對稱加密算法

''''''
'''
url 的加密和解密
'''
from urllib import parse
s='加密字符'
s1=parse.quote(s)
print(s1)
#%E5%8A%A0%E5%AF%86%E5%AD%97%E7%AC%A6
s2=parse.unquote(s)
print(s2)
#加密字符


'''
base64:
這個是網絡上最常見的用於傳輸字節碼的方式之一
這是一個基於64個可打印字符來表示二進制的方法,用於在http環境下傳遞數據
輸入 A-Z a-z 0-9 和 “+” 、“/” 很多時候字符串尾部爲 1個或者兩個 =
'''
import base64
s='加密字符'
#加密
s3=base64.b64encode(s.encode())
print(s3)
#b'5Yqg5a+G5a2X56ym'
#解密
s4=base64.b64decode(s3).decode()
print(s4)
#加密字符


'md5 加密'
import hashlib
s='加密字符'
m=hashlib.md5()
m.update(s.encode())
s5=m.hexdigest()
print(s5)
'229c1f7f0a857e81810648bf9cde948c'
#看到一串由16進制組成的32位字符,就有很大機率是一個md5加密的了


'''
現在大多數用的都是3DES加密

DES 和 3DES 都是對稱加密,可以轉過去也可以轉過來

不管是DES 加密還是 3DES加密都需要抓兩個東西才能解密(key 和 鹽)

如果遇到DES和3DES 加密的數據的解密思路:
首先確定加密方法是什麼
然後找到這個算法需要的key 出現在哪個頁面,去請求獲取
'''

# # DES 加密
from Crypto.Cipher import DES
from Crypto.Util import Counter
from Crypto import Random
import binascii

key = '-8B key-' # 長度爲8
msg = 'We are no longer the knights who say ni!'
nonce = Random.new().read(int(DES.block_size/2))

def des_encrypt(key, msg):
    ctr = Counter.new(int(DES.block_size*8/2), prefix=nonce)
    cipher = DES.new(key, DES.MODE_CTR, counter=ctr)
    msg = nonce + cipher.encrypt(msg)
    msg = binascii.b2a_hex(msg)
    return msg.decode()

print(des_encrypt(key.encode(), msg.encode()))

# 3DES 加密
from Crypto.Cipher import DES3
from Crypto import Random
import binascii

key = 'Sixteen byte key'
msg = 'sona si latine loqueris '
iv = Random.new().read(DES3.block_size)
# print(iv)
def des3_encrypt(key, msg):
    cipher = DES3.new(key, DES3.MODE_OFB, iv)
    msg = iv + cipher.encrypt(msg)
    msg = binascii.b2a_hex(msg)
    return msg.decode()

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