重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
导致这种错误的原因是没有正确安装AES库,执行下面命令安装Python3版本的AES库:
专注于为中小企业提供成都网站制作、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业淮安区免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
pipinstall pycryptodome
------------------------------
ID:Python之战
|作|者|公(zhong)号:python之战
专注Python,专注于网络爬虫、RPA的学习-践行-总结
喜欢研究和分享技术瓶颈,欢迎关注
独学而无友,则孤陋而寡闻!
---------------------------
问题背景:
m3u8文件加密时,使用“from Crypto.Cipher import AES”相关函数解密:
#EXT-X-KEY 记录了加密的方式,一般是AES-128以及加密的KEY信息
出现问题:
from Crypto.Cipher import AES
pip install Crypto
出错
解决办法:
安装crypto库(首字母c是小写)
pip install crypto
进入python的库管理位置,site-packages文件夹,找到crypto,将其首字母c改为大写
判断是否解决的方式:
from Crypto.Cipher import AES
不会报错,说明成功。
备注:
如果在C:\Python36\Lib\site-packages\Crypto目录下没有找到:\Cipher目录。
可以尝试安装pycryptodome库 或 pycrypto库:
pip install pycryptodome
pip install pycrypto (安装这个库,基本会失败,会报错)
你看一下这个例子吧。可以参考下面的地址:前面加上http,把句号改成点。
likang。me/blog/2013/06/05/python-pycrypto-aes-ecb-pkcs-5/
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
import os
BS = AES.block_size
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s : s[0:-ord(s[-1])]
key = os.urandom(16) # the length can be (16, 24, 32)
text = 'to be encrypted'
cipher = AES.new(key)
encrypted = cipher.encrypt(pad(text)).encode('hex')
print encrypted # will be something like 'f456a6b0e54e35f2711a9fa078a76d16'
decrypted = unpad(cipher.decrypt(encrypted.decode('hex')))
print decrypted # will be 'to be encrypted'
它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。 AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。Figure 1 显示了 AES 用192位密钥对一个16位字节数据块进行加密和解密的情形。
本来以为这是个比较简单的东西,网上一搜一大把。搜索结果气的我自己看文档写了一个。
首先安装pycryptodome或者pycryptodomex 用pip 安装,安装之后需要修改包名crypto改为Crypto
我是采用ECB模式加密你也可以用其他模式加密,模式区别可以看这篇 。
秘钥加密解密需要统一。