Js:使用MD5对密码加密的案例

import requests
import hashlib
from lxml import etree

# js 对密码的加密:
# pwd = md5(pwd + 'Hq44cyp4mT9Fh5eNrZ67bjifidFhW%fb0ICjx#6gE59@P@Hr8%!WuYBa1yvytq$qh1FEM18qA8Hp9m3VLux9luIYpeYzA2l2W3Z');
#js:加密函数
def js_pwd(pwd):
    # 创建MD5对象
    md5_hash = hashlib.md5()
    # 对密码字符串进行编码
    pwd_string = pwd + 'Hq44cyp4mT9Fh5eNrZ67bjifidFhW%fb0ICjx#6gE59@P@Hr8%!WuYBa1yvytq$qh1FEM18qA8Hp9m3VLux9luIYpeYzA2l2W3Z'
    encoded_pwd_string = pwd_string.encode('utf-8')
    # 更新哈希对象
    md5_hash.update(encoded_pwd_string)
    # 获取十六进制表示的哈希值
    MD5_pwd = md5_hash.hexdigest()
    return MD5_pwd

# 加密后的密码
password=js_pwd("13302775336Ma.")
print("加密后的pwd:\n"+password)
# 参数
params={
    "email":"3221231187@qq.com",
    "password":password
}
# 请求头
headers= {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
}
# url
url="https://www.94mxd.com.cn/signin"
# 发送请求
response=requests.get(url=url,headers=headers,params=params)
# 检查响应状态
if response.status_code == 200:
    print("成功获取 HTML 内容")
    # 使用推测的编码来解码
    response.encoding = response.apparent_encoding  # 自动检测编码
    print("使用: encoding:", response.encoding+"进行解码!")
    html = response.text  # 获取 HTML 内容
    # 保存到文件
    file_name = "煤想到.html"
    with open(file_name, "w", encoding="utf-8") as file:
        file.write(html)
        print(f"HTML 内容已成功保存到文件:{file_name}")
    # 使用 lxml.etree.HTML 解析 HTML 内容
    html_tree = etree.HTML(response.text)
    print(html_tree)
else:
    print(f"请求失败,状态码: {response.status_code}")

代码功能概述

  1. 密码加密:定义了一个js_pwd函数,该函数将输入的密码与一个特定的字符串拼接后,使用 Python 的hashlib.md5进行 MD5 加密,返回加密后的十六进制字符串。
  2. 发送请求:使用requests库发送一个带有加密密码和邮箱参数的 GET 请求到指定的 URL。
  3. 处理响应:检查响应状态码,如果状态码为 200,表示请求成功,将响应内容保存到文件中,并使用lxml.etree解析 HTML 内容;否则,打印请求失败信息。

代码问题与优化建议

1. 加密逻辑的 JavaScript 模拟

代码中模拟了 JavaScript 的 MD5 加密逻辑,但要注意 JavaScript 和 Python 的字符串处理可能存在细微差异。不过当前的代码实现是正确的,只是需要确保拼接的字符串和 JavaScript 中的一致。

2. 请求方法

使用requests.get方法发送请求时,参数会被附加到 URL 后面。如果这个接口要求使用 POST 方法发送数据,那么需要将requests.get改为requests.post,并相应地修改代码:

response = requests.post(url=url, headers=headers, data=params)
3. 错误处理

代码中只是简单地检查了响应状态码,对于请求过程中可能出现的其他异常(如网络错误、超时等)没有进行处理。可以添加异常处理机制来增强代码的健壮性:

3. 错误处理

代码中只是简单地检查了响应状态码,对于请求过程中可能出现的其他异常(如网络错误、超时等)没有进行处理。可以添加异常处理机制来增强代码的健壮性:

try:
    response = requests.get(url=url, headers=headers, params=params)
    response.raise_for_status()  # 检查响应状态码,如果不是200,抛出异常
    # 处理成功响应的代码
except requests.RequestException as e:
    print(f"请求发生错误: {e}")
4. 代码结构和注释

代码整体结构较为清晰,但可以添加更多的注释来解释关键步骤和逻辑,提高代码的可读性。

优化后的代码示例

import requests
import hashlib
from lxml import etree

# js 对密码的加密逻辑模拟
def js_pwd(pwd):
    # 创建MD5对象
    md5_hash = hashlib.md5()
    # 拼接密码和特定字符串
    pwd_string = pwd + 'Hq44cyp4mT9Fh5eNrZ67bjifidFhW%fb0ICjx#6gE59@P@Hr8%!WuYBa1yvytq$qh1FEM18qA8Hp9m3VLux9luIYpeYzA2l2W3Z'
    # 对拼接后的字符串进行UTF-8编码
    encoded_pwd_string = pwd_string.encode('utf-8')
    # 更新哈希对象
    md5_hash.update(encoded_pwd_string)
    # 获取十六进制表示的哈希值
    MD5_pwd = md5_hash.hexdigest()
    return MD5_pwd

# 加密后的密码
password = js_pwd("13302775336Ma.")
print("加密后的pwd:\n" + password)

# 请求参数
params = {
    "email": "3221231187@qq.com",
    "password": password
}

# 请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
}

# 请求URL
url = "https://www.94mxd.com.cn/signin"

try:
    # 发送请求
    response = requests.get(url=url, headers=headers, params=params)
    response.raise_for_status()  # 检查响应状态码

    print("成功获取 HTML 内容")
    # 使用推测的编码来解码
    response.encoding = response.apparent_encoding
    print(f"使用: encoding: {response.encoding} 进行解码!")
    html = response.text  # 获取 HTML 内容

    # 保存到文件
    file_name = "煤想到.html"
    with open(file_name, "w", encoding="utf-8") as file:
        file.write(html)
        print(f"HTML 内容已成功保存到文件:{file_name}")

    # 使用 lxml.etree.HTML 解析 HTML 内容
    html_tree = etree.HTML(response.text)
    print(html_tree)

except requests.RequestException as e:
    print(f"请求发生错误: {e}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值