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)

猜你喜欢

转载自blog.csdn.net/u012593871/article/details/79345848
今日推荐