精华内容
下载资源
问答
  • 文章目录Python 视频下载,下载加密的m3u8 文件到本地相关阅读1、代码2、相关问题 Python 视频下载,下载加密的m3u8 文件到本地 相关阅读 Python 学习之《Learn Python3 The Hard Way 》第一部分学习笔记 Python ...

    Python 视频下载,下载加密的m3u8 文件到本地


    相关阅读

    在这里插入图片描述

    1、代码

    
    import requests
    import re
    from Crypto.Cipher import AES
    import json
    import base64
    import time
    
    
    def m3u8(url, path):
        header = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
        }
        # requests得到m3u8文件内容
        content = requests.get(url, headers=header).text
        if "#EXTM3U" not in content:
            print("这不是一个m3u8的视频链接!")
            return False
        if "EXT-X-KEY" not in content:
            print("没有加密")
            return False
    
        # 使用re正则得到key和视频地址
        jiami = re.findall('#EXT-X-KEY:(.*)\n', content)
        key = re.findall('URI="(.*)"', jiami[0])
        vi = re.findall('IV=(.*)', jiami[0])[0]
    
        # 得到每一个ts视频链接
        tslist = re.findall('EXTINF:(.*),\n(.*)\n#', content)
        newlist = []
        for i in tslist:
            newlist.append(i[1])
    
        # 得到key的链接并请求得到加密的key值
        keyurl = key[0]
        keycontent = requests.get(keyurl, headers=header).content
    
        # 得到每一个完整视频的链接地址
        base_url = url.replace(url.split('/')[-1], '')
        print(base_url)
        tslisturl = []
        for i in newlist:
            tsurl = base_url + i
            tslisturl.append(tsurl)
    
        # 得到解密方法,这里要导入第三方库  pycrypto
        # 这里有一个问题,安装pycrypto成功后,导入from Crypto.Cipher import AES报错
        # 找到使用python环境的文件夹,在Lib文件夹下有一个 site-packages 文件夹,里面是我们环境安装的包。
        # 找到一个crypto文件夹,打开可以看到 Cipher文件夹,此时我们将 crypto文件夹改为 Crypto 即可使用了
        #     print(keycontent)
        cryptor = AES.new(keycontent, AES.MODE_CBC)
    
        # for循环获取视频文件
        for i in tslisturl:
            res = requests.get(i, header)
            # 使用解密方法解密得到的视频文件
            cont = cryptor.decrypt(res.content)
            # 以追加的形式保存为mp4文件
            with open(path, 'ab+') as f:
                f.write(cont)
        return True
    

    2、相关问题

    安装了 pycrypto 但是运行报错,说找不到模块,解决方案为

    pip uninstall pycrypto  
    
    pip install pycryptodome
    
    展开全文
  • python 文件加密

    2020-08-19 17:05:00
    说一下原理:我们都知道一个字节的取值范围是0-255 也就是256个基本单位构成了文本、图片、视频等 总而言之:256把锁对应256把钥匙 ''' import re # 设置钥匙和锁 字典格式 lockAndKey = {自己设置钥匙和锁} # ...
    '''
    该程序来自和女朋友吵架后(不想谈了  准前女友)
    说一下原理:我们都知道一个字节的取值范围是0-255  也就是256个基本单位构成了文本、图片、视频等
    总而言之:256把锁对应256把钥匙
    '''
    import re
    
    # 设置钥匙和锁  字典格式
    lockAndKey = {自己设置钥匙和锁}
    
    
    # 加密
    def encryption(path):
        encryptionBeforBin = b''  # 操作之前的二进制
        encryptionAfterBin = b''  # 操作之后的二进制
        global lockAndKey  # 指向外部字典
        # 读取文件
        with open(path, 'rb') as file:
            encryptionBeforBin = file.read()  # 获得文件的二进制文件
            # 循环遍历二进制
            for i in encryptionBeforBin:
                encryptionAfterBin = encryptionAfterBin + bytes([lockAndKey[i]])  # 加密
        print('已经生成加密信息')
        # 重写文件
        with open(path, 'wb') as file:
            file.write(encryptionAfterBin)
        print("\033[37;41m Done!\033[0m")
    
    # 解密
    def decode(path):
        encryptionBeforBin = b''  # 操作之前的二进制
        encryptionAfterBin = b''  # 操作之后的二进制
        global lockAndKey  # 指向外部字典
        # 颠倒锁和钥匙
        lockAndKey = {value: key for key, value in lockAndKey.items()}
        # 读取文件
        with open(path, 'rb') as file:
            encryptionBeforBin = file.read()  # 获得文件的二进制文件
            # 循环遍历二进制
            for i in encryptionBeforBin:
                encryptionAfterBin = encryptionAfterBin + bytes([lockAndKey[i]])  # 解密
        print('已经生成解密信息')
        # 重写文件
        with open(path, 'wb') as file:
            file.write(encryptionAfterBin)
        print("\033[37;41m Done!\033[0m")
    
    
    if __name__ == '__main__':
        content = '''
    ******************************
    *        该加密适用于小文件       *
    *                               *
    *         加密请输入0              *
    *         解密请输入1               *
    ************************************
        '''
        print(content)
        choose = input('输入你的选择:')
        if not re.fullmatch('[0-1]', choose):
            print("\033[37;41m 不要皮 \033[0m")
            exit(1)
        path = input('输入文件路径:')
    
        if choose.__eq__('0'):
            encryption(path)
        else:
            decode(path)
    
    
    展开全文
  • 这个代码也算不上很难,而且他的实用性也不怎么样,主要就是Python语言这几年这么火,再加上这学期课比较少,而且老师一再强调我们专业编程能力要好,英语要好,数学要好,物理要好orz(好吧就是地球物理专业),我就...

    叙:

    这是我在网上发表的第一篇文章,以前连在网上发表评论次数也不多,所以决定在正文前面加个叙来说一些杂七杂八的东西,想看代码的朋友可以直接跳到正文部分。

    这个代码也算不上很难,而且他的实用性也不怎么样,主要就是Python语言这几年这么火,再加上这学期课比较少,而且老师一再强调我们专业编程能力要好,英语要好,数学要好,物理要好orz(好吧就是地球物理专业),我就顺带学习一下Python,然后按照自己的一些想法去写点Python代码,这个在网上查找相关想法,然后筛选,最后通过代码实现的过程感觉也有一些收获。最最重要的是网上的一些代码竟然有错误,这对于我这种对Python接触不久却又兴致勃勃的菜鸡的打击是致命的QAQ。还好我意志坚定,求学心切,孜孜不倦(这可能是在多次期末考试中锻炼出来的),所以我这个文章就当是我这一个想法的总结(花了我一天半的周末,可恶T^T)。

    等等,既然是第一次发文章,我要再说点。突然想提到点以前的某些经历,比如用Github+Hexo创建个人博客平台(后来发现还是别的平台好用,所以就废置了);在起点注册了账号并决定以后不管多忙都要缓慢连载更新(后来学业太重+游戏比写文章好玩就忘了这件事);还想到有一次厚着脸皮跟着老师想做点东西,然后兴致勃勃的去做老师交给我的方向,结果真的很用心的搞了好长时间,根本就感觉到绝望,然后查询到一个人的硕士论文,就发短信非常亲切的想要他硕士论文中的一些算法程序。结果人家没搭理我......

    算了,感觉自己再写下去要自闭了。正文准备开始吧。

    正文:

    图片加密:

    最开始是我自己的关于图片加密的一些粗略的对像素点操作的一种加密算法,并将它付诸行动了,后来Python中对于整数类型就给我上了一课,让我这个孩子意识到Python的可怕。后来经过查阅终于克服了,然后我发现自己的想法太智障以至于很难起到理想的效果,最后我在网上找已有的方法(好吧我承认我见识少TAT),最后选用了一种比较简单的方法(对我来说能用Python实现)orz,查询了一些Python相关函数并安装了一些库最后实现了。

    算法:图片是由RGB三道组成的,范围是0-255(十进制),将其转为八位数的二进制,之后二进制数字前后四位数换一下位置,再转换成十进制得到新的RGB值。例如:200=11001000,转换位置之后为10001100=140。就这样对每一个像素点的RGB三道运算,就会得到加密的图片。再用加密算法对图片运算一次,就会得到解密后的图片即原图片。

    代码实现:

    #定义加密函数

    def jiami(x):

    leng=len(bin(x).replace('0b',''))

    if leng==8:

    return int('0b'+(bin(x).replace('0b','')[::-1]),2)

    else:

    return int('0b'+((8-leng)*'0'+bin(x).replace('0b',''))[::-1],2)

    import cv2 #需要下载python中opencv的库

    import numpy as np

    #载入图片路径

    x=cv2.imread('C:/Users/Lenovo/Desktop/112.jpg')

    #调用函数加密

    i,j,k=x.shape #得到图片的三维数据(宽,长,3)

    y=np.zeros_like(x)

    for q in range(i): #调用两次循环逐点运算

    for w in range(j):

    for r in range(k):

    y[q,w,r]=jiami(x[q,w,r])

    #显示加密前图片(原图)

    cv2.namedWindow('x', 0)

    cv2.imshow('x',x)

    #显示加密后图片

    cv2.namedWindow('y', 0)

    cv2.imshow('y',y)

    ########################################

    #再次调用函数对加密后的图片运算,即解密

    i,j,k=y.shape

    z=np.zeros_like(y)

    for q in range(i):

    for w in range(j):

    for r in range(k):

    z[q,w,r]=jiami(y[q,w,r])

    #显示解密后图片

    cv2.namedWindow('z', 0) #处理因图片太大导致的窗口显示不够的问题

    cv2.imshow("z", z)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

    代码运行效果:

    1a19cf165b06?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo

    原图.png

    1a19cf165b06?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo

    加密后图片.png

    1a19cf165b06?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo

    解密后图片.png

    视频加密:

    算法:打字太累了直接贴代码吧。注意事项:在视频载入部分

    out = cv2.VideoWriter('exjiemi.mp4', fourcc, 30, (960, 544))

    代码之中,30是帧率,960是帧宽度,544是帧高度。帧宽度和高度应该保持和原视频一致。否则生成的视频会只有几kb。而且这种加密视频会比较慢,还不如设置一个压缩包密码来得划算,但是这个在网上查阅资料,然后实现想法的学习过程是能让人成长的(Q^Q)。

    代码如下;

    import cv2

    import numpy as np

    ###################### 视频载入 #############################

    cap = cv2.VideoCapture('exjiemi.mp4')

    fourcc = cv2.VideoWriter_fourcc(*'XVID')

    out = cv2.VideoWriter('exjiami.mp4', fourcc, 30, (960, 544))

    ##################### 函数载入 #############################

    #加密函数

    def jiami(x):

    leng=len(bin(x).replace('0b',''))

    if leng==8: #如果位数为8

    return int('0b'+(bin(x).replace('0b','')[::-1]),2)

    else: #之所以用else ,因为要先变成8位二进制

    return int('0b'+((8-leng)*'0'+bin(x).replace('0b',''))[::-1],2)

    #返回加密后图片的加密函数

    def process_image(x):

    i,j,k=x.shape

    y=np.zeros_like(x)

    for q in range(i):

    for w in range(j):

    for r in range(k):

    y[q,w,r]=jiami(x[q,w,r])

    return y

    ##################### 视频处理 #############################

    print('视频加密中,请等待...')

    while (cap.isOpened()):

    rval,frame = cap.read()

    if rval==True:

    frame=process_image(frame)

    out.write(frame)

    #cv2.imshow('frame', frame)#这个作用是显示视频,注释不注释都行

    if cv2.waitKey(50) & 0xFF == ord('q'):

    break

    else:

    break

    print('视频加密成功')

    cap.release()

    out.release()

    cv2.destroyAllWindows()

    同理,再对加密视频运行一次就得到解密后的视频

    视频声音方面会有问题,我也不想搞了,周末都快结束了。。。

    有人需要的话我再补充吧,或者等我兴趣来了。。。

    代码运行效果:

    。。。。。。

    才发现markdown编辑模式没法插入视频。。。

    经过我的运行发现视频加密解密是没问题的,案例视频等有空了我再在下面加一个链接。以后的代码也会挂在我的Github上。得等到有空了。。。

    链接:https://github.com/Qyunian/My-simple-code

    当然现在是空的。上传时间未知,因为这个文章估计也没人看。。。

    ————2019.3.10 12:33 Changchun

    展开全文
  • Python下载加密m3u8视频

    千次阅读 2019-03-14 11:42:02
    一些网站会提供m3u8视频地址,以供下载观看。或者一些网站经过分析后发现是使用m3u8格式进行播放的,这时使用m3u8的地址链接就可以下载到相应的视频。 一、关于m3u8:...

    一些网站会提供m3u8视频地址,以供下载观看。或者一些网站经过分析后发现是使用m3u8格式进行播放的,这时使用m3u8的地址链接就可以下载到相应的视频。

    一、关于m3u8:(https://blog.csdn.net/baidu_34418350/article/details/64922512)

    m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过 编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。

    http://t.elecfans.com/live/749.html?room=1

    直接F12查看视频播放列表链接

    ## 一、实际地址获取

    #EXTM3U

    #EXT-X-VERSION:3

    #EXT-X-TARGETDURATION:22

    #EXT-X-MEDIA-SEQUENCE:0

    #EXT-X-KEY:METHOD=AES-128,URI="video.key"

    #EXTINF:16.666667,

    index0.ts

    #EXTINF:16.666667,

    index1.ts

    #EXTINF:16.666667,

    index2.ts

    #EXTINF:16.666667,

    index3.ts

    #EXTINF:8.333333,

    index4.ts

    看到ts结尾的文件,这才是视频真正的存放路径:

    下载到本地,视频软件无法播放:

    ## 二、视频下载

    可以用python脚本自动下载这些ts文件,但实际上有些网站的ts文件是用AES-128加密过的,所以需要解密才能播放。

    加密过的视频在第二层m3u8中会有一个key文件链接:

    #EXTM3U

    #EXT-X-VERSION:3

    #EXT-X-TARGETDURATION:22

    #EXT-X-MEDIA-SEQUENCE:0

    #EXT-X-KEY:METHOD=AES-128,URI="video.key"

    #key密钥文件

    需要去读取这个key文件,才能拿到解密密钥。

    然后开始【Python抄写】

    # -*- coding:utf-8 -*-  
    import os
    import sys
    import requests
    import datetime
    from Crypto.Cipher import AES
    from binascii import b2a_hex, a2b_hex
     
    #reload(sys)
    #sys.setdefaultencoding('utf-8')
     
    def download(url):
        download_path = os.getcwd() + "\download"
        if not os.path.exists(download_path):
            os.mkdir(download_path)
            
        #新建日期文件夹
        download_path = os.path.join(download_path, datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))
        #print download_path
        os.mkdir(download_path)
            
        all_content = requests.get(url).text  # 获取第一层M3U8文件内容
        if "#EXTM3U" not in all_content:
            raise BaseException("非M3U8的链接")
     
        if "EXT-X-STREAM-INF" in all_content:  # 第一层
            file_line = all_content.split("\n")
            for line in file_line:
                if '.m3u8' in line:
                    url = url.rsplit("/", 1)[0] + "/" + line # 拼出第二层m3u8的URL
                    all_content = requests.get(url).text
     
        file_line = all_content.split("\n")
     
        unknow = True
        key = ""
        for index, line in enumerate(file_line): # 第二层
            if "#EXT-X-KEY" in line:  # 找解密Key
                method_pos = line.find("METHOD")
                comma_pos = line.find(",")
                method = line[method_pos:comma_pos].split('=')[1]
                print ("Decode Method:", method)
                
                uri_pos = line.find("URI")
                quotation_mark_pos = line.rfind('"')
                key_path = line[uri_pos:quotation_mark_pos].split('"')[1]
                
                key_url = url.rsplit("/", 1)[0] + "/" + key_path # 拼出key解密密钥URL
                res = requests.get(key_url)
                key = res.content
                print ("key:" , key)
                
            if "EXTINF" in line: # 找ts地址并下载
                unknow = False
                pd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1] # 拼出ts片段的URL
                #print pd_url
                
                res = requests.get(pd_url)
                c_fule_name = file_line[index + 1].rsplit("/", 1)[-1]
                
                if len(key): # AES 解密
                    cryptor = AES.new(key, AES.MODE_CBC, key)  
                    with open(os.path.join(download_path, c_fule_name + ".mp4"), 'ab') as f:
                        f.write(cryptor.decrypt(res.content))
                else:
                    with open(os.path.join(download_path, c_fule_name), 'ab') as f:
                        f.write(res.content)
                        f.flush()
        if unknow:
            raise BaseException("未找到对应的下载链接")
        else:
            print ("下载完成")
        merge_file(download_path)
     
    def merge_file(path):
        os.chdir(path)
        cmd = "copy /b * new.tmp"
        os.system(cmd)
        os.system('del /Q *.ts')
        os.system('del /Q *.mp4')
        os.rename("new.tmp", "new.mp4")
        
    if __name__ == '__main__': 
        url = "http://media.elecfans.com/topic/gongkaike/2019/03/d220246a27f399509fc2022731b8ae3b/30/hls/index.m3u8" 
        download(url)

    代码照搬--------------------- 
    作者:a33445621 
    来源:CSDN 
    原文:https://blog.csdn.net/a33445621/article/details/80377424 
     

    展开全文
  • python代码加密

    2021-04-09 15:12:43
    python默认提供的tornado,django,flask等框架使用很方便,但在小组开发的模式下,如何分工合作,各司其职一致是一个很麻烦的事情。另外传统的项目发布,为了代码的保密,采用pyinstaller或者其他方式进行部署,不...
  • 使用python,下载加密的流媒体m3u8视频文件,爬虫获取电影资源。M3U8是Unicode版本的M3U,用UTF-8编码。m3u8文件其实是 HTTP Live Streaming(缩写为`HLS`)协议的部分内容。HLS 的工作原理是把整个流分成多个小的...
  • python凯撒加密图片

    2020-06-23 10:31:28
    欢迎加入我们卧虎藏龙的python讨论qq群:729683466之前有朋友在群里问凯撒密码询问如何用凯撒密码加密文件几天,就用图片加密给大家演示一下如何给图像进行加密对图像的每个像素点进...
  • python实现加密的方式总结

    千次阅读 2020-01-18 14:46:27
    对称密钥加密 , 又叫私钥加密。即信息发送的方和接受方用一个密钥去加密和揭秘数据。 最大的优势是 加解密速度快,适合对大量数据进行加密, 对称加密的缺点是密钥的管理和分配, 换句话说就是 如何把密钥发送到...
  • 视频加密流程图: 后端获取保利威的视频播放授权token,提供接口api给前端 参考文档:http://dev.polyv.net/2019/videoproduct/v-api/v-api-play/create-playsafe-token/ 在utils下创建polyv.py,编写token生成工具函数...
  • 如何用python抓取vip加密视频和1400篇文章的故事 学习pyhton之前,我学的东西比较多,比较杂,有C、C++、JAVA、还有PHP,真正爱上python差不多在三年前,一次用于帮朋友抓取文章和VIP视频的背后,从此一发不可收拾。...
  • 一个简单的python图像加密

    千次阅读 2020-07-05 22:30:06
    最近开始做图像加密与深度学习技术结合,自己先写了一个用python写的图像加密简单算法: import numpy as np from tensorflow.examples.tutorials.mnist import input_data import pylab #########################...
  • 大家好,我是小小明。...下面我们将使用Python下载m3u8格式的加密离线视频流。 游览器抓包过滤能够获取该影片的m3u8播放地址: 首先,测试一下该地址: import m3u8 headers = { "User-Agent": "Mozilla/
  • 为你的Python程序加密

    2019-03-11 08:30:00
     文/jclian在实际的工作中,有时候我们需要部署自己的Python应用,但这时候我们并不希望别人能够看到自己的Python源程序。因此,我们需要为自己的源代码进行加...
  • python 解密 M3U8 AES 加密视频

    千次阅读 2020-09-30 17:03:45
    从浏览器下载的M3U8格式视频有时会被AES加密。windows下解密AES需要安装pycryptodome 模块和pycrypto模块,使用conda或pip安装这两个模块。 conda install pycryptodome conda install pycrypto 安装完成后在Python...
  • Python视频教程

    2019-03-21 17:10:52
    Python视频免费分享不加密的: 链接:https://pan.baidu.com/s/1LBxGIaY0rZMqiMINAAmGeg 为了防止密码失效,关注下面公众号,回复66,可以获得最新提取密码:
  • Python爬虫:逆向分析某云音乐加密参数

    万次阅读 多人点赞 2020-09-05 09:54:07
    本篇博文通过对网易云音乐进行逆向分析,用Python代码模拟了AES和RSA加密过程,并在文章的末尾提供了一些参数,可以用这些参数来获取歌曲对应的歌词及用户的评论。
  • Python中的加密货币/比特币交易机器人 使用基于Python的开源软件进行算法/自动加密货币交易 @BlockchainEng Joaquin Roibal撰写的指南和YouTube教学视频,重点介绍了加密交易策略,例如三角套利,做市等。 您好,...
  • python 下载拉钩教育AES加密视频

    千次阅读 2020-07-07 15:09:13
    但是由于没有提供缓冲和下载视频的功能,所以就打算把视频通过python给下载下来,以下的文章都是参考博友的,自己总结下并学习学习。 正式爬取: 1.拉钩教育的网址:https://kaiwu.lagou.com/,输入自己的账号和密码...
  • 生活中,有时候我们需要对一些重要的文件进行加密Python 提供了诸如 hashlib,base64 等便于使用的加密库。但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,785
精华内容 7,114
关键字:

python视频加密

python 订阅