python加解密详解- 爬虫常见

简介

在做爬虫数据抓取的很多时候post请求参数中重要的数据都是经过js的加密,js中常常加密的js函数有以下几种:

  • base64
  • RSA
  • MD5
  • DES
  • AES
    常见为RSA或base64+RSA进行登陆/验证码加密

普及一下各种加密算法
Base64编码(基础)
单项散列函数 MD5、SHA1、SHA256、SHA512等
消息认证码 HMAC-MD5、HMAC-SHA1
对称加密 DES|3DES|AES(高级加密标准)
非对称加密 RSA
数字签名
证书

base64


base64理论上这个不可以称为加密,只是将文本按照一定的编码格式重新写一遍罢了,但是可以起到一定的加密作用。

  • 需要用到的python:base64
  • 常作用于页面中的cookies,邮件以及简单的加密
  • 原理:
  • 1.base64是一种用64个字符来表示任意二进制数据的方法,64个字符为:“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=”,
    2.组成一个数组,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit如果要编码的二进制数据不是3的倍数
    3.Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

pyhon代码实现:

# 加密
import base64
def encode64(data):
# 注意 转码的类型必须是bytes,如果是str类型需要进行encode
	return base64.b64encode(data.encode("utf-8"))
# 解密
def decode64(data):
	return base64.b64decode(data)
	
data = "abcd"
encode = encode64(data)
print("加密结果为:",encode)
print("解密结果为:",decode64(data))

运行完成之后的结果是:

加密结果为: b'YWJjZA=='
解密结果为: b'i\xb7\x1d'
  • 提示一句:当我们对在URL中使用的Base64格式文本,即二维码等抓取下来保存的时候是需要进行一次base64的解码再进行数据保存

RSA加密


RSA非对称加密
由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的非对称加密系统, 又称公钥密钥加密。 非对称加密为数据的加密与解密提供了一种非常安全的方式。使用了一对密钥, 私钥和公钥。 私钥只能有一方安全保管(服务器), 不能外泄, 而公钥可以发给任何请求的人。非对称加密使用这对密钥中的一个进行加密, 而解密却需要一个另外一个密钥。 目前最常用的非对称加密算法是RSA算法。公钥机制灵活,但加密和解密速度却比对称密钥(AES)加密慢得多。 公钥机制灵活, 但是加密和解密速度却要比堆成加密慢很多。

-安装库:Cryptodome (pip3 install pycryptodome)之前的crypto已经没有更新维护

  • 优点:安全性高,在实际使用中私钥一般保存在发布者手中,是私有的不对外公开的,只将公钥对外公布,就能实现只有私钥的持有者才能将数据解密的方法。 这种加密方式安全系数很高,因为它不用将解密的密钥进行传递,从而没有密钥在传递过程中被截获的风险,而破解密文几乎又是不可能的。
  • 缺点:速度慢、效率低、资源消耗高
  • 应用场景:密码、验证码等重要的数据
  • 原理:RSA加密算法的特性,RSA的公钥私钥都是10进制的,但公钥的值常常保存为16进制的格式,所以需要将其用int()方法转换为10进制格式。

python代码实现为:

from Crypto.Cipher import  PKCS1_v1_5 as Cipher
from Crypto.PublicKey import RSA
#获取公钥
def get_public_key():
    url = "“
    rsp = requests.get(url, verify=False)
     public = rsp.json()['data']
     key = """-----BEGIN RSA PRIVATE KEY-----\n{}\n-----END RSA PRIVATE KEY-----""".format(
         public)
     return key

        
def Encrypt(publice,string):
"""	传入公钥以及需要解密的string"""
	publice_key = RSA.importKey(public,string)
    cipher = Cipher.new(publice_key)  
    cipher_text = base64.b64encode(cipher.encrypt(bytes(string, encoding="utf-8")))
    cipher_text = cipher_text.decode('utf-8')
    return cipher_text

你可能感兴趣的:(python加解密详解- 爬虫常见)