源码分享-M3U8数据流ts的AES-128解密并合并---GoLang实现

之前使用C语言实现了一次,见M3U8数据流ts的AES-128解密并合并。

学习了Go语言后,又用Go重新实现了一遍。源码如下,无第三方库依赖。

package mainimport ("crypto/aes""crypto/cipher""encoding/binary""fmt""io""os""strconv"
)func decodeAES128CBC(key []byte, index int, inFile string, out io.Writer) error {block, err := aes.NewCipher(key)if err != nil {return err}inBuf, err := os.ReadFile(inFile)if err != nil || len(inBuf) == 0 {return err}var iv [16]bytebinary.BigEndian.PutUint32(iv[12:], uint32(index))outBuf := make([]byte, len(inBuf))mode := cipher.NewCBCDecrypter(block, iv[:])mode.CryptBlocks(outBuf, inBuf)pad := int(outBuf[len(outBuf)-1])_, err = out.Write(outBuf[:len(outBuf)-pad])return err
}func decodeAesM3u8(key, inPath, outFile string) (int, error) {out, err := os.Create(outFile)if err != nil {return 0, err}defer out.Close()for i := 0; ; i++ {err = decodeAES128CBC([]byte(key), i, inPath+strconv.Itoa(i), out)if err != nil {if i == 0 {return 0, err}return i, nil}}
}func mergeM3u8(inPath, outFile string) (int, error) {out, err := os.Create(outFile)if err != nil {return 0, err}defer out.Close()for i := 0; ; i++ {in, err := os.Open(inPath + strconv.Itoa(i))if err != nil {if i == 0 {return 0, err}return i, nil}_, err = io.Copy(out, in)if err != nil {_ = in.Close()return i, err}err = in.Close()if err != nil {return i, err}}
}func main() {inPath, key, outFile := os.Args[1], os.Args[2], os.Args[3]var n intvar err errorif len(key) == 16 {n, err = decodeAesM3u8(key, inPath, outFile)} else {n, err = mergeM3u8(inPath, outFile)}if err != nil {fmt.Println(err)return}fmt.Println("successfully converted", n, "files")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/95601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工厂管理软件中的PLM管理

第一部分:介绍PLM管理的定义和背景 1.1 定义:PLM管理是指通过工厂管理软件实现对产品生命周期各个阶段的全面管理和协同合作,包括产品设计、工艺规划、生产制造、质量控制、供应链管理等环节。 1.2 背景:随着市场竞争的加剧和消…

Vue组件通信应用实践总结

【1】 组件通信的5种方式 props vue的自定义事件 pubsub第三方库 slot vuex① props 父子组件间通信的基本方式 属性值的2大类型: 一般: 父组件-->子组件函数: 子组件-->父组件 隔层组件间传递: 必须逐层传递(麻烦) 兄弟组件间: 必须借助父组件(麻烦)② vue自定义事件 …

【ORM】浅聊C#和Java的ORM底层框架

给自己一个目标,然后坚持一段时间,总会有收获和感悟! 国庆假期马上结束,闲暇时间,突然对Ado.Net这个词的由来感兴趣,然后就一顿复习了一遍,顺便也了解了下java关于ORM框架的底层是什么&#xff…

Gmail 将停止支持基本 HTML 视图

根据 Google 支持文档的更新内容,Gmail 将从明年 1 月起停止支持基本 HTML 视图。 ▲ Gmai 基本 HTML 视图界面 目前网页版 Gmail 提供两个界面:基本 HTML 视图和标准视图。停止支持基本 HTML 视图后,当前打开经典模式的基本 HTML 视图模式 …

一文解释mapState的来龙去脉

mapState Vuex 提供的辅助函数之一,将 store 中的状态映射到组件的计算属性中,使得在组件中可以轻松地访问 Vuex store 中的状态值 MapState(映射状态) 在我们的 Count.vue 组件中,可以使用 mapState 来更简洁地获取 count 的状态值 首先&…

python读取vivo手机截图,将满屏图片文件移动别的路径

问题之初 python读取vivo手机截图, 将满屏图片文件移动别的路径好多这样的图片,占用手机大量的内存,食之无味弃之可惜!那么会复制粘贴👀代码的我们我们今天就把这些图片筛选清理掉。 这段代码 原有逻辑的基础上&…

基于知识蒸馏的两阶段去雨去雪去雾模型学习记录(二)之知识收集阶段

前面学习了模型的构建与训练过程,然而在实验过程中,博主依旧对数据集与模型之间的关系有些疑惑,首先是论文说这是一个混合数据集,但事实上博主在实验时是将三个数据集分开的,那么在数据读取时是如何混合的呢&#xff0…

林沛满-Wireshark的提示

本文整理自:《Wireshark网络分析的艺术 第1版》 作者:林沛满 著 出版时间:2016-02 最近有不少同事开始学习 Wireshark,他们遇到的第一个困难就是理解不了主界面上的提示信息,于是跑来问我。问的人多了,我也…

如何一步步优化负载均衡策略

发展到一定阶段后,Web 应用程序就会增长到单服务器部署无法承受的地步。这时候企业要么提升可用性,要么提升可扩展性,甚至两者兼而有之。为此,他们会将应用程序部署在多台服务器上,并在服务器之前使用负载均衡器来分配…

第10章 MySQL(二)

10.11 请你说下你对ACID的理解 难度:★ 重点:★★ 白话解析 前面的题目搞明白了MySQL的原理、架构和索引,那接下来,我们捋一捋SQL在执行过程中的最核心的问题了——事务问题。 先搞明白事务的4个特性。 参考答案 1、A(Atomicity):原子性,就是一堆的SQL操作要么全部…

华为云云耀云服务器L实例评测|SpringCloud相关组件——nacos和sentinel的安装和配置 运行内存情况 服务器被非法登陆尝试的解决

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍SpringCloud相关组件——nacos和sentinel的安装和配置,并分析了运行内存情况,此…

数据在内存中的存储(1)

文章目录 目录1. 数据类型介绍1.1 类型的基本归类 2. 整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍2.3 练习 附: 目录 数据类型介绍整形在内存中的存储大小端字节序介绍及判断浮点型在内存中的存储 1. 数据类型介绍 前面我们已经学习了基本的内置类型以…

【数据结构】数据结构基础概念

系列文章目录 第一章:【数据结构】数据结构基础概念 文章目录 系列文章目录前言简介名词解释数据数据元素数据项数据对象数据结构数据类型抽象抽象数据类型算法算法设计要求 总结 前言 数据结构是软件编程的基础,是程序员的基本功。 简介 数据结构是一…

Ubuntu20配置Mysql常用操作

文章目录 版权声明ubuntu更换软件源Ubuntu设置静态ipUbuntu防火墙ubuntu安装ssh服务Ubuntu安装vmtoolsUbuntu安装mysql5.7Ubuntu安装mysql8.0Ubuntu卸载mysql 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程…

12、建立健全人员培训体系

9、大小屏分离与精细化审核 10、质量审核的设立与合并 11、视频分类建议 内容仓为公司其他部门输送了许多人才,既包括有潜力的主管,也有表现突出或者具备某些特殊能力的员工,从内容仓走出的同事,有些已经成为公司重要业务某个方…

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测 目录 回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测预测效果基本介绍模型描述程序设计预测效果 <

lv7 嵌入式开发-网络编程开发 11 TCP管理与UDP协议

目录 1 TCP管理 1.1 三次握手 1.2 四次挥手 1.3 保活计时器 2 wireshark安装及实验 3.1 icmp协议抓包演示 3.2 tcp协议抓包演示 3 UDP协议 3.1 UDP 的主要特点&#xff1a; 4 练习 1 TCP管理 1.1 三次握手 TCP 建立连接的过程叫做握手。 采用三报文握手&#xff1…

Fiddler抓取手机https包的步骤

做接口测试时&#xff0c;有时我们需要使用fiddler进行抓包分析&#xff0c;那么如何抓取https包。主要分为以下七步&#xff1a; 1.设置fiddler选项&#xff1a;Tools->Options,按如下图勾选 2.下载并安装Fiddler证书生成器 下载地址&#xff1a;http://www.telerik.com/…

C/C++——内存管理

1.为什么存在动态内存分配 灵活性 静态内存分配是在编译时确定的&#xff0c;程序执行过程中无法改变所分配的内存大小&#xff1b;动态内存分配可以根本程序的运行环境来动态分配和释放空间&#xff0c;提供了更大的灵活性 动态数据结构 有些数据结构的大小和结构在编译时…

运动控制:分辨率、定位精度、重复定位精度

分辨率&#xff0c;定位精度&#xff0c;重复定位精度三者之间有什么关系&#xff1f; 对于这个问题&#xff0c;我相信&#xff0c;很多刚开始做设计的伙伴们&#xff0c;都有这样的疑问。 今天&#xff0c;不墨迹&#xff0c;直接讲问题。 先说分辨率&#xff0c;这个最容…