破解JS常见加密

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/gklcsdn/article/details/102072235

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=风景"
# url编码
parse_encrypt = parse.quote(url)
# 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编码
base64_encode = base64.b64encode(url.encode())
# base64解码
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加密

特点

  1. 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  2. 容易计算:从原数据计算出MD5值很容易。
  3. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  4. 强抗碰撞:已知原数据和其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

# msg长度和mode有关
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

非对称加密

# 密文 = 明文**E % N
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)
    

猜你喜欢

转载自blog.csdn.net/gklcsdn/article/details/102072235