盘点Python 爬虫中的常见加密算法

 更新时间:2022年07月01日 12:02:31   作者:俊欣  
这篇文章主要介绍了盘点Python 爬虫中的常见加密算法,加密即Encryption指将明文数据变换为密文的过程,解密即Decryption指加密的逆过程,即由密文恢复出原明文的过程

前言

今天小编就带着大家来盘点一下数据抓取过程中这些主流的加密算法,它们有什么特征、加密的方式有哪些等等,知道了这些之后对于我们逆向破解这些加密的参数会起到不少的帮助!

相信大家在数据抓取的时候,会碰到很多加密的参数,例如像是"token"、"sign"等等,今天小编就带着大家来盘点一下数据抓取过程中这些主流的加密算法,它们有什么特征、加密的方式有哪些等等,知道了这些之后对于我们逆向破解这些加密的参数会起到不少的帮助!

1. 基础常识

首先我们需要明白的是,什么是加密和解密?顾名思义

  • 加密(Encryption): 将明文数据变换为密文的过程
  • 解密(Decryption): 加密的逆过程,即由密文恢复出原明文的过程。

加密和解密算法的操作通常都是在一组密钥的控制下进行的,分别成为是加密密钥(Encryption Key)和解密密钥(Decryption Key),

如下图所示:

而加密算法当中又分为是对称加密和非对称加密以及散列算法,其中

  • 对称加密:即加密与解密时使用的是相同的密钥,例如RC4、AES、DES等加密算法
  • 非对称加密:即加密与解密时使用不相同的密钥,例如RSA加密算法等
  • 散列算法:又称为是哈希函数。对不同长度的输入消息产生固定的输出,该输出值就是散列值

2. Base64伪加密

Base64严格意义上来说不算做事加密的算法,只是一种编码的方式,它是一种用64个字符,分别是A-Z、a-z、0-9、+、/这64个字符,实现对数据的编码,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。我们使用Python来对任意网址进行Base64的编码操作,代码如下:

import base64
# 想将字符串转编码成base64,要先将字符串转换成二进制数据
url = "www.baidu.com"
bytes_url = url.encode("utf-8")
str_url = base64.b64encode(bytes_url)  # 被编码的参数必须是二进制数据
print(str_url)

输出:

b'd3d3LmJhaWR1LmNvbQ=='

那么同样地,我们也可以对其进行解码的操作,代码如下:

url = "d3d3LmJhaWR1LmNvbQ=="
str_url = base64.b64decode(url).decode("utf-8")
print(str_url)

输出:

www.baidu.com

3. MD5加密

MD5是一种被广泛使用的线性散列算法,且加密之后产生的是一个固定长度(32位或者是16位)的数据,由字母和数字组成,大小写统一。其最后加密生成的数据是不可逆的,也就是说不能够轻易地通过加密后的数据还原到原始的字符串,除非是通过暴力破解的方式。

我们在Python当中来实现一下MD5加密:

import hashlib
str = 'this is a md5 demo.'
hl = hashlib.md5()
hl.update(str.encode(encoding='utf-8'))
print('MD5加密前为 :' + str)
print('MD5加密后为 :' + hl.hexdigest())

输出:

MD5加密前为 :this is a md5 demo.
MD5加密后为 :b2caf2a298a9254b38a2e33b75cfbe75

就像上文提到的,针对MD5加密可以通过暴力破解的方式来降低其安全性,因此在实操过程当中,我们会添加盐值(Salt)或者是双重MD5加密等方式来增加其可靠性,代码如下:

# post传入的参数
params = "123456"
# 加密后需拼接的盐值(Salt)
salt = "asdfkjalksdncxvm"
def md5_encrypt():
m = md5()
m.update(params.encode('utf8'))
sign1 = m.hexdigest()
return sign1
def md5_encrypt_with_salt():
m = md5()
m.update((md5_encrypt() + salt).encode('utf8'))
sign2 = m.hexdigest()
return sign2

4. AES/DES对称加密

首先我们来讲DES加密,全称是Data Encryption Standard,即数据加密标准,在对称性加密当中比较常见的一种,也就是加密和解密过程当中使用的密钥是相同的,因此想要破解的话,通过暴力枚举的方式,只要计算的能力足够强还是可以被破解的。

AES的全称是Advanced Encryption Standard,是DES算法的替代者,也是当今最流行的对称加密算法之一。想要弄清楚AES算法,首先就得弄明白三个基本的概念:密钥、填充和模式。

密钥

密钥我们之前已经说了很多了,大家可以将其想象成是一把钥匙,既可以用其来进行上锁,可以用其来进行解锁。AES支持三种长度的密钥:128位、192位以及256位。

填充

而至于填充这一概念,AES的分组加密的特性我们需要了解,具体如下图所示:

简单来说,AES算法在对明文加密的时候,并不是把整个明文一股脑儿地加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块的长度为128比特。

这些明文块经过AES加密器的复杂处理之后,生成一个个独立的密文块,将这些密文块拼接到一起就是最终的AES加密的结果了。

那么这里就有一个问题了,要是有一段明文的长度是196比特,如果按照每128比特一个明文块来拆分的话,第二个明文块只有64比特了,不足128比特该怎么办呢?这个时候就轮到填充来发挥作用了,默认的填充方式是PKCS5Padding以及ISO10126Padding。

不过在AES加密的时候使用了某一种填充方式,解密的时候也必须采用同样的填充方式。

模式

AES的工作模式,体现在了把明文块加密成密文块的处理过程中,主要有五种不同的工作模式,分别是CBC、ECB、CTR、CFB以及OFB模式,同样地,如果在AES加密过程当中使用了某一种工作模式,解密的时候也必须采用同样地工作模式。最后我们用Python来实现一下AES加密。

import base64
from Crypto.Cipher import AES
def AES_encrypt(text, key):
   pad = 16 - len(text) % 16
   text = text + pad * chr(pad)
   text = text.encode("utf-8")
   encryptor = AES.new(key.encode('utf-8'), AES.MODE_ECB)
   encrypt_text = encryptor.encrypt(text)
   encrypt_text = base64.b64encode(encrypt_text)
   return encrypt_text.decode('utf-8')

到此这篇关于盘点Python 爬虫中的常见加密算法的文章就介绍到这了,更多相关Python 加密算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Numpy实现按指定维度拼接两个数组的实现示例

    Numpy实现按指定维度拼接两个数组的实现示例

    Numpy提供了多个函数来拼接数组,其中最常用的是np.concatenate、np.vstack、np.hstack等,本文就来介绍一下Numpy实现按指定维度拼接两个数组的实现,感兴趣的可以了解一下
    2024-03-03
  • Pygame实现文字显示在窗口中

    Pygame实现文字显示在窗口中

    这篇文章主要介绍了Pygame实现在窗口中显示文字,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Python实现Selenium自动化Page模式

    Python实现Selenium自动化Page模式

    这篇文章主要介绍了Python实现Selenium自动化Page模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python自动抢红包教程详解

    Python自动抢红包教程详解

    在本篇文章里小编给大家整理了关于Python自动抢红包的相关知识点内容,有兴趣的朋友们参考学习下。
    2019-06-06
  • python使用SMTP发送qq或sina邮件

    python使用SMTP发送qq或sina邮件

    这篇文章主要为大家详细介绍了python使用SMTP发送qq或sina邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • python flask框架快速入门

    python flask框架快速入门

    Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展,都需要用第三方的扩展来实现,本文给大家分享如何快速入门python flask框架,感兴趣的朋友一起看看吧
    2021-05-05
  • python神经网络tf.name_scope和tf.variable_scope函数区别

    python神经网络tf.name_scope和tf.variable_scope函数区别

    这篇文章主要为大家介绍了python神经网络tf.name_scope和tf.variable_scope函数的使用区别,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • keras tensorflow 实现在python下多进程运行

    keras tensorflow 实现在python下多进程运行

    今天小编就为大家分享一篇keras tensorflow 实现在python下多进程运行,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python+matplotlib绘制饼图和堆叠图

    Python+matplotlib绘制饼图和堆叠图

    Matplotlib是Python的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。本文将为大家介绍如何用matplotlib绘制饼图和堆叠图,感兴趣的朋友可以学习一下
    2022-04-04
  • python模拟菜刀反弹shell绕过限制【推荐】

    python模拟菜刀反弹shell绕过限制【推荐】

    这篇文章主要介绍了利用python模拟菜刀反弹shell绕过限制,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06

最新评论