zoukankan      html  css  js  c++  java
  • Python3使用AES加密的库函数PyCrypto、PyCryptodome

      我们在网上查看Python爬虫教程的时候,细心的朋友会发现:很多网站为了降低服务器的请求压力都做了各式各样的反爬策略,浏览器通过http post请求服务器端数据时,传输的data字段很多都是经过加密后的密文,杂乱无章。如12306网站、网易云音乐网页版:类似于下文:

      这些网站经常使用AES的加密算法。AES为一种对称性加密算法(高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。),具体运算略复杂,附上别人写的AES加解密技术贴,供参考:https://blog.csdn.net/qq_28205153/article/details/55798628

      很多爬虫教程是针对Python2.7编写的,部分第三方库也长时间未维护,可能在新版本中已经失效。比如PyCrypto,可以用于AES、RSA等多种加密。在windows系统下python3.6版本已经无法正常安装,这个加密的库几年前就已经停止维护。而pycryptodome包可以解决此问题,pip install pycryptodome就可以。如果之前已经安装pyCrypto包,则需要在PowerShell或CMD下先卸载pyCrypto,才能安装pycryptodome成功,两个包会相互冲突:

    1、pip uninstall pycrypto

    2、pip install pycryptodome

    不过pycryptodome兼容性更好,但是语法跟pycrypto包基本无差别。很多基于pycrypto的python脚本,代码稍加修改就可以兼容pycryptodome。官方文档表明它支持python2.6及以上还有python3+的版本:原文:It supports Python 2.6 or newer, all Python 3 versions and PyPy。附上官方文档:http://pycryptodome.readthedocs.io/en/latest/src/introduction.html

    代码的引入方式也非常简单:

    from Crypto.Cipher import AES
    from Crypto.Random import get_random_bytes
    
    key = get_random_bytes(16)
    cipher = AES.new(key, AES.MODE_EAX)
    ciphertext, tag = cipher.encrypt_and_digest(data)
    
    file_out = open("encrypted.bin", "wb")
    [ file_out.write(x) for x in (cipher.nonce, tag, ciphertext) ]

    当然我们如果不知道密钥,只知道AES加密后的密文,依旧很难推算出明文,AES加密正是因为它的快速和绝对安全,才会在诸多领域有着广泛的应用,比如:家用路由器就普遍采用AES的加密算法。

  • 相关阅读:
    C和指针学习笔记--第五章
    C和指针学习笔记--第四章
    C和指针学习笔记--第三章
    ipables常用命令
    linux网络设计与实现-----第一章
    iptables
    cJSON学习
    Makefile-更新函数库文件
    Makefile隐晦规则
    【Spark学习笔记】01-Spark简介
  • 原文地址:https://www.cnblogs.com/new-june/p/9401002.html
Copyright © 2011-2022 走看看