IT袋

当前位置:主页 > 经验教程 > 建站编程 >

爬虫逆向加密入门之MD5、URLEncode和Base64

爬虫逆向加密入门之MD5、URLEncode和Base64(2)

时间:2024-02-22 18:37:32 来源:IT袋 作者:马勇
导读:爬虫逆向加密入门之MD5、URLEncode和Base64,此时会发现, 在浏览器上明明是能看到中文的. 但是一旦复制出来. 或者在抓包工具里看到的. 都是这种%. 那么这个%是什么鬼? 也是加密么? 非也, 其实我们在

爬虫逆向加密入门之MD5、URLEncode和Base64

此时会发现, 在浏览器上明明是能看到中文的. 但是一旦复制出来. 或者在抓包工具里看到的. 都是这种%. 那么这个%是什么鬼? 也是加密么?

非也, 其实我们在访问一个url的时候. 浏览器会自动的进行urlencode操作. 会对我们请求的url进行编码. 这种编码规则被称为百分号编码. 是专门为url(统一资源定位符)准备的一套编码规则.

一个url的完整组成:

scheme://host:port/dir/file?p1=v1&p2=v2#anchor
http  ://www.baidu.com/tieba/index.html?name=alex&age=18
    参数: key=value
    服务器可以通过key拿value

此时. 如果参数中出现一些特殊符号. 比如’=’ 我想给服务器传递a=b=c这样的参数. 必然会让整个URL产生歧义.

所以, 把url中的参数部分转化成字节. 每字节的再转化成2个16进制的数字. 前面补%.

看着很复杂. 在python里. 直接一步到位

from urllib.parse import urlencode, unquote, quote
# 单独编码字符串
wq = "米饭怎么吃"
print(quote(wq))  # %E7%B1%B3%E9%A5%AD%E6%80%8E%E4%B9%88%E5%90%83
print(quote(wq, encoding="gbk")) # %C3%D7%B7%B9%D4%F5%C3%B4%B3%D4
# 多个数据统一进行编码
dic = {
    "wq": "米饭怎么吃",
    "new_wq": "想怎么吃就怎么吃"
}
print(urlencode(dic))  # wq=%E7%B1%B3%E9%A5%AD%E6%80%8E%E4%B9%88%E5%90%83&new_wq=%E6%83%B3%E6%80%8E%E4%B9%88%E5%90%83%E5%B0%B1%E6%80%8E%E4%B9%88%E5%90%83
print(urlencode(dic, encoding="utf-8"))  # 也可以指定字符集
# 一个完整的url编码过程
base_url = "http://www.baidu.com/s?"
params = {
    "wd": "大王"
}
url = base_url + urlencode(params)
print(url)  # http://www.baidu.com/s?wd=%E5%A4%A7%E7%8E%8B

解码

s = "http://www.baidu.com/s?wd=%E5%A4%A7%E7%8E%8B"
print(unquote(s))  # http://www.baidu.com/s?wd=大王

base64其实很容易理解. 通常被加密后的内容是字节. 而我们的密文是用来传输的(不传输谁加密啊). 但是, 在http协议里想要传输字节是很麻烦的一个事儿. 相对应的. 如果传递的是字符串就好控制的多. 此时base64就应运而生了. 26个大写字母+26个小写字母+10个数字+2个特殊符号(+和/)组成了一组类似64进制的计算逻辑. 这就是base64了.

import base64
bs = "我要吃饭".encode("utf-8")
# 把字节转化成b64
print(base64.b64encode(bs).decode())
# 把b64字符串转化成字节
s = "5oiR6KaB5ZCD6aWt"
print(base64.b64decode(s).decode("utf-8"))

注意, b64处理后的字符串长度. 一定是4的倍数. 如果在网页上看到有些密文的b64长度不是4的倍数. 会报错

例如,

import base64
s = "ztKwrsTj0b0"
bb = base64.b64decode(s)
print(bb)
此时运行出现以下问题
Traceback (most recent call last):
  File "D:/PycharmProjects/rrrr.py", line 33, in <module>
    bb = base64.b64decode(s)
  File "D:\Python38\lib\base64.py", line 87, in b64decode
    return binascii.a2b_base64(s)
binascii.Error: Incorrect padding

相关阅读

  • 网站还原错误是怎么回事 网站还原错误解决方法

    网站还原错误是怎么回事 网站还原错误解决方法

    为网友解答网站还原错误是怎么回事和网站还原错误解决方法IT技巧方面的经验,一起跟随小编看看吧! 大家在网上冲浪的时候是不是都遇到过这个页面,404 Not Found到底是什么意思。 网页错误

  • 什么是中间人攻击 怎样防止这种攻击

    什么是中间人攻击 怎样防止这种攻击

    本文核心导读:什么是中间人攻击方面的知识,下面小编为您详细解答 自从互联网诞生以来,网络攻击的方式就层出不穷,而且很多早期的攻击技巧已经沿用至今。 中间人攻击(Man in the Mid

  • 游戏平台有哪些 十个在线玩游戏的网站推荐

    游戏平台有哪些 十个在线玩游戏的网站推荐

    您可能不了解十个在线玩游戏的网站推荐和游戏平台有哪些的相关内容,请看下面详细的介绍。 分享十个非常有意思的在线游戏小网站,无需下载,随便打开哪个都能玩上一整天! 1、3D游戏网

  • 个人网站制作步骤 网页设计与制作教程

    个人网站制作步骤 网页设计与制作教程

    小编为你解答个人网站制作步骤和网页设计与制作教程方面的知识,一起来看看吧! 随着各种网页制作工具的普及,现在不懂技术的个人也能顺利建站了。不过使用网页制作工具虽然简单,但