文章目录
JS破解常见加密解密方法1. URL编码2. Base64编码3. MD5加密特点4. Python加密库PyCryptodome安装与导入AES(对称加密)(msg, key)
RSA非对称加密
JS破解常见加密解密方法
我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes。
所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错。
将字符串和Bytes互相转换可以使用encode()和decode()方法。
1. URL编码
一般中文是不允许出现在url中的, 这就需要用到url编码和解码了
from urllib
import parse
url
= "https://www.baidu.com/s?ie=UTF-8&wd=风景"
parse_encrypt
= parse
.quote
(url
)
parse_decrypt
= parse
.unquote
(parse_encrypt
)
print(parse_encrypt
)
print(parse_decrypt
)
>>>
https
%3A//www
.baidu
.com
/s
%3Fie
%3DUTF
-8%26wd
%3D%E9
%A3
%8E%E6
%99%AF
https
://www
.baidu
.com
/s?ie
=UTF
-8&wd
=风景
2. Base64编码
在js加密解密的时候经常会用到base64编码解码的情况
import base64
url
= 'http://mvvideoshare2.meitudata.com/5d6b32824ae722zczc1zid7892_H264_MP5d6b39.mp4?k=cf8ccd3e12648d8bb869bff2f97344a6&t=5d9a67b4'
base64_encode
= base64
.b64encode
(url
.encode
())
base64_decode
= base64
.b64decode
(base64_encode
)
print(base64_encode
)
print(base64_decode
)
>>>
b
'aHR0cDovL212dmlkZW9zaGFyZTIubWVpdHVkYXRhLmNvbS81ZDZiMzI4MjRhZTcyMnpjemMxemlkNzg5Ml9IMjY0X01QNWQ2YjM5Lm1wND9rPWNmOGNjZDNlMTI2NDhkOGJiODY5YmZmMmY5NzM0NGE2JnQ9NWQ5YTY3YjQ='
b
'http://mvvideoshare2.meitudata.com/5d6b32824ae722zczc1zid7892_H264_MP5d6b39.mp4?k=cf8ccd3e12648d8bb869bff2f97344a6&t=5d9a67b4'
3. MD5加密
特点
压缩性:任意长度的数据,算出的MD5值长度都是固定的。容易计算:从原数据计算出MD5值很容易。抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
import hashlib
md5_encrypt
= hashlib
.md5
("测试".encode
()).hexdigest
()
print(md5_encrypt
)
>>>
db06c78d1e24cf708a14ce81c9b617ec
4. Python加密库PyCryptodome
安装与导入
Windows安装之前需要先安装***Microsoft Visual c++ 2015***。
在Linux上安装
pip
install pycryptodome
导入:
import Crypto
在Windows 上安装
pip
install pycryptodomex
导入:
import Cryptodome
AES(对称加密)(msg, key)
import binascii
from Cryptodome
.Cipher
import AES
def aes_encrypt(msg
, key
):
if len(msg
)%16 != 0:
padding
= 16 - len(msg
)%16
msg
+= padding
*chr(padding
)
iv
= "0102030405060708"
cipyter
= AES
.new
(key
.encode
(), AES
.MODE_CBC
, iv
=iv
.encode
())
encrypt
= cipyter
.encrypt
(msg
.encode
())
encrypt
= binascii
.b2a_hex
(encrypt
)
print(encrypt
.decode
())
aes_encrypt
("sdsdsd", "0CoJUm6Qyw8W8jud")
RSA
非对称加密
import codecs
def rsa_encrypt(msg
, n
, e
):
msg
= msg
.encode
()
enctext
= int(codecs
.encode
(msg
, encoding
='hex'), 16)**int(e
, 16)%int(n
,16)
return format(enctext
, 'x').zfill
(256)
msg
= "ffffffffffffffff"
e
= '010001'
n
= "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
rsat
= rsa_encrypt
(msg
, n
, e
)
print(rsat
)
rsa_encrypt
(msg
, n
, e
)