kgtemp文件是酷我音乐软件的缓存文件,本文从技术层面探讨如何解密该文件为mp3文件,并通过读取ID3信息来重命名。

kgtemp解密

kgtemp文件前1024个字节是固定的包头信息,解密方案详细可以参见(http://www.cnblogs.com/KMBlog/p/6877752.html):

class Program{static void Main(string[] args){byte[] key={0xAC,0xEC,0xDF,0x57};using (var input = new FileStream(@"E:\KuGou\Temp\236909b6016c6e98365e5225f488dd7a.kgtemp", FileMode.Open, FileAccess.Read)){var output = File.OpenWrite(@"d:\test.mp3");//输出文件input.Seek(1024, SeekOrigin.Begin);//跳过1024字节的包头byte[] buffer = new byte[key.Length];int length;while((length=input.Read(buffer,0,buffer.Length))>0){for(int i=0;i<length;i++){var k = key[i];var kh = k >> 4;var kl = k & 0xf;var b = buffer[i];var low = b & 0xf ^ kl;//解密后的低4位var high = (b >> 4) ^ kh ^ low & 0xf;//解密后的高4位buffer[i] = (byte)(high << 4 | low);}output.Write(buffer, 0, length);}output.Close();}Console.WriteLine("按任意键退出...");Console.ReadKey();}}

这样解密出来就是mp3文件了

读取ID3信息

解密出来的文件还需要手动命名,不是很方便,可以读取ID3V1信息重命名文件。
ID3V1比较简单,它是存放在MP3文件的末尾,用16进制的编辑器打开一个MP3文件,查看其末尾的128个顺序存放字节,数据结构定义如下:
char Header3; /标签头必须是"TAG"否则认为没有标签/
char Title[30]; /标题/
char Artist[30]; /作者/
char Album[30]; /专集/
char Year4; /出品年代/
char Comment[30]; /备注/
char Genre; /类型,流派/

解析代码比较简单,注意中文歌曲用GBK编码就可以了:

  private static Mp3Info FormatMp3Info(byte[] Info, System.Text.Encoding Encoding){Mp3Info myMp3Info = new Mp3Info();string str = null;int i;int position = 0主要代码jia,; //循环的起始值int currentIndex = 0; //Info的当前索引值//获取TAG标识for (i = currentIndex; i < currentIndex + 3; i++){str = str + (char)Info[i];position++;}currentIndex = position;myMp3Info.identify = str;//获取歌名str = null;byte[] bytTitle = new byte[30]; //将歌名部分读到一个单独的数组中int j = 0;for (i = currentIndex; i < currentIndex + 30; i++){bytTitle[j] = Info[i];position++;j++;}currentIndex = position;myMp3Info.Title = ByteToString(bytTitle, Encoding);//获取歌手名str = null;j = 0;byte[] bytArtist = new byte[30]; //将歌手名部分读到一个单独的数组中for (i = currentIndex; i < currentIndex + 30; i++){bytArtist[j] = Info[i];position++;j++;}currentIndex = position;myMp3Info.Artist = ByteToString(bytArtist, Encoding);//获取唱片名str = null;j = 0;byte[] bytAlbum = new byte[30]; //将唱片名部分读到一个单独的数组中for (i = currentIndex; i < currentIndex + 30; i++){bytAlbum[j] = Info[i];position++;j++;}currentIndex = position;myMp3Info.Album = ByteToString(bytAlbum, Encoding);//获取年str = null;j = 0;byte[] bytYear = new byte[4]; //将年部分读到一个单独的数组中for (i = currentIndex; i < currentIndex + 4; i++){bytYear[j] = Info[i];position++;j++;}currentIndex = position;myMp3Info.Year = ByteToString(bytYear, Encoding);//获取注释str = null;j = 0;byte[] bytComment = new byte[28]; //将注释部分读到一个单独的数组中for (i = currentIndex; i < currentIndex + 25; i++){bytComment[j] = Info[i];position++;j++;}currentIndex = position;myMp3Info.Comment = ByteToString(bytComment, Encoding);//以下获取保留位myMp3Info.reserved1 = (char)Info[++position];myMp3Info.reserved2 = (char)Info[++position];myMp3Info.reserved3 = (char)Info[++position];//return myMp3Info;}

转换小工具

写了一个小工具,来进行转换

下载地址:https://pan.baidu.com/s/1o7FIsPk

PS:上面只读取了IDV1,部分歌曲可能不存在
可以下载@缤纷 提供的程序,增加了ID3V2的支持:
https://files.cnblogs.com/files/gxlxzys/kgtemp%E6%96%87%E4%BB%B6%E8%BD%ACmp3%E5%B7%A5%E5%85%B7.zip


作者:Jadepeng
出处:jqpeng的技术记事本--http://www.cnblogs.com/xiaoqi
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

kgtemp文件转mp3工具相关推荐

  1. PCM转MP3工具的封装

    PCM转MP3工具的封装 说明 1. 对 PCM 转 MP3 进行了简单的封装. 2. 使用 https://github.com/wuqiong/mp3lame-for-iOS 生成支持64位的 l ...

  2. 怎么转换html文件为mp3,如何把音频转换成mp3_音频文件怎么转mp3格式-系统城

    随着计算机技术的发展,网络上的音频文件的格式会随着音质的好坏决定存储的格式,一些朋友想要把某些音频文件转化成mp3格式,却不知道怎么操作.那么我们该如何把音频文件转换成mp3呢?接下来小编就给大家带来 ...

  3. ogg批量配置_Macos上一款批量文件重命名工具A Better Finder Rename 11

    如何快速批量重命名文件呢?Macos上一款批量文件重命名工具A Better Finder Rename 11. A Better Finder Rename 11 mac​www.macw.com ...

  4. 怎么把m4a文件变成mp3格式

    怎么把m4a文件变成mp3格式?关于音频文件格式,大家可能对mp3.flac.wav.wmv这几种比较熟悉,因为这是集中较为常见的为音频格式.不知道大家对m4a这种音频格式是否了解呢?m4a是MPEG ...

  5. 【PC工具】更新微信语音转mp3保存备份方法及工具,微信语音备份方法,silk转mp3工具...

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 210605更新蓝奏云下载连接. 不知道蓝奏云抽啥风,感觉像是域名到期被别人给抢注了. ...

  6. 【PC工具】微信语音转mp3保存备份方法及工具,微信语音备份方法,silk转mp3工具...

    微信是大家常用的通信工具,有些聊天记录的语音是我们想要长期保存或转发给其他人的.今天介绍一下微信语音的备份保存方法. 收藏的方法方法很简单,长按语音点击收藏就可以了,以后想听可以在"我&qu ...

  7. php silk文件转换mp3,微信小程序silk录音文件转mp3

    这几天做开发寻思给自己的小程序添加一个录音的功能觉得没啥难度以为调调接口就能好了,万万没想到万恶的微信小程序接口返回的录音音频格式竟然是silk格式的 , 微信接口是amr格式的 , 由于之前做过am ...

  8. Beyond Compare 4 智能比较工具、Everything 文件/夹搜索工具,WinRAR,7-Zip 解压缩工具、diagrams 流程图工具、Markdown 编辑器-Notable

    目录 Beyond Compare 概述与下载 Beyond Compare 友好使用 jd-gui 反编译 Java 源码工具 Everything 文件/夹搜索工具 WinRAR.7-Zip 解压 ...

  9. 在服务器端,转换amr格式音频文件为MP3格式

    由于当前pc端浏览器及移动端浏览器都不支持直接播放amr格式文件,因此考虑在服务器端,将amr文件转换为MP3文件,使浏览器可直接播放. 在服务器使用ffmpeg工具,供php调用,用来转换amr文件 ...

  10. 语音amr文件转换为mp3文件

    1.安卓前端生成amr语音文件,经过base64加密变成加密字符串 2.把加密后的字符串解密成amr文件 生成amr文件目录   String fileUrl = System.getProperty ...

最新文章

  1. 用例子来彻底搞明白Virtual 和 非 virtual(C#)
  2. 学习动态性能表 第二篇--v$sesstat
  3. 5 年开发搞不定 MySQL !
  4. yolov5 多版本共存
  5. 训练集数量对神经网络光谱的影响
  6. ASP.NET GridView嵌套DataList实例
  7. Linux中自动删除n天前日志
  8. DMA存储器到外设代码讲解
  9. java jaas_基于Java JAAS表单的身份验证
  10. 基于WDF的PCI/PCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)
  11. mathematica 8.0.0 激活方法
  12. 限时授权复制文件 1.0(2015.9.2更新)
  13. Java 反射机制之 Class
  14. LintCode: Two Sum
  15. [转] crontab命令
  16. 频谱分析_滚动轴承的频谱分析
  17. C语言小案例_OA大典故障案例摘录【第1390篇】夏普mxm2608n 黑白复印机漏粉
  18. centos 7下搭建wiki系统
  19. 微信网页授权 Vue
  20. hardhat 教程及 hardhat-deploy 插件使用

热门文章

  1. C语言中的运算符(超全超详细)
  2. 大数据之clickhouse各类引擎
  3. SI4463低功耗测试-STC单片机一样可以超低功耗
  4. android开发之路-----------转自任玉刚大神
  5. 矩形窗函数rect()和辛格函数sinc()是一组傅里叶变换对相关公式证明
  6. 自然语言处理之语料库
  7. 三菱plc指令dediv_三菱 PLC梯型图(指令编码)反汇编程序--开源 PLC 编程重点参考资料...
  8. 中国历史37位奇女子
  9. 如何建立企业员工满意度测评指标体系
  10. 【python】面向对象和正则表达式