资讯专栏INFORMATION COLUMN

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

89542767 / 512人阅读

  现如今,各行各业都会用到各种各样的算法,包括我们在使用Python的时候,也会使用到各种各样的算法,比如,我们会使用到各种的加密算法,那么,到底什么才是加密算法呢?下面就给大家详细解答下。


  序言


  下面小编就和大家一起来盘点下数据收集环节中这一些热门的密码算法,这些有什么特点、数据加密的形式有哪些方面这些,了解了这一些以后其实对于我们反向破译这一些数据加密的主要参数可以起到很多的协助!


  相信大家数据收集的过程中,会遇到许多数据加密的主要参数,比如说好像"token"、"sign"这些,下面小编就和大家一起来盘点下数据收集环节中这一些热门的密码算法,这些有什么特点、数据加密的形式有哪些方面这些,了解了这一些以后其实对于我们反向破译这一些数据加密的主要参数可以起到很多的协助!


  1.基础常识


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


  加密(Encryption):将明文数据变换为密文的过程


  解密(Decryption):加密的逆过程,即由密文恢复出原明文的过程。


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


  如下图所示:

01.png

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


  对称加密:即加密与解密时使用的是相同的密钥,例如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加密的时候使用了某一种填充方式,解密的时候也必须采用同样的填充方式。

02.png

  模式


  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')


  综上所述,这篇内容就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128437.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • #yyds干货盘点# Python - 第一个爬虫

    摘要:常见状态码号码含义表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程表示服务器成功接收请求并已完成整个处理过程。 创建时间:2021-11-24作者:在下小黄一、小试牛刀:1.1 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由...

    王笑朝 评论0 收藏0
  • Python 从零开始爬虫(九)——模拟登录,cookie的使用

    摘要:所以只要得到登录后的并必要时进行更新,服务器就会认定其为登录状态。看看人家知乎,加密到连名字都没有了,还混淆,如何下手综上,适用于没有加密的登录或者加密算法比较简单并且不常更新的网站。遇上无解的加密算法要么手操拷贝,要么请大佬出场。 某些网站,登录和没登录,用户的权限是不一样的,帐号登录之后才能获取更多的信息。更有甚者一上来就是登录界面,不登录就不给你进去(如p站)。爬取目标不用登录固...

    edgardeng 评论0 收藏0
  • 超详细的Python实现百度云盘模拟登陆(模拟登陆进阶)

    摘要:方法不仅适用于百度云,别的一些比较难以模拟登陆的网站都可以按照这种方式分析。本文要求读者具有模拟登陆主要是抓包和阅读代码和密码学的基本知识。和模拟登陆微博的分析流程一样,我们首先要做的是以正常人的流程完整的登录一遍百度网盘。 这是第二篇从简书搬运过来的文章(大家别误会,是我原创的)。因为前一篇文章,我看反响还挺好的,所以把这篇也搬运过来了,其实目的还是为宣传自己的分布式微博爬虫(该项目...

    CarterLi 评论0 收藏0
  • #yyds干货盘点# 前端基础知识面试集锦1

    摘要:作用标准模式与兼容模式各有什么区别声明位于位于文档中的第一行,处于标签之前。又称内核及以上版本,等内核及以上。存储大小数据大小不能超过。可以防止恶意刷票论坛灌水有效防止对某一个特定注册用户用特定程序暴力方式进行不断的登陆尝试。 HTMLDoctype作用?标准模式与兼容模式各有什么区别?(1)、声明位于位于HT...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

最新活动
阅读需要支付1元查看
<