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. 入职阿里啦!极客时间kotlin
  2. 【待继续研究】解析信用评分模型的开发流程及检验标准(晕乎乎,看不懂~)
  3. vue就地复用不是更快吗_Vue.js从零开始——组件(1)
  4. Java 并发时的 互斥锁机制
  5. iOS之深入解析内存管理Tagged Pointer的底层原理
  6. Angular6错误 Service: No provider for Renderer2
  7. 一个全屏页面切换实例
  8. 高亮显示 html_友达10.1寸超低温高亮工业液晶屏G101STN01.C
  9. karatsuba乘法
  10. handler和thread之间如何传输数据_HTTP和TCP之间的关系
  11. Mac Dock截图的小技巧
  12. Mybatis Sql 大于号小于号不兼容
  13. BGP、MPLS综合实验
  14. uniapp navigateTo跳转失效
  15. 【固定定位和绝对定位】
  16. SolidWorks弹簧扣与弹簧扣凹槽使用技巧
  17. pytorch加载自己的图片数据集的两种方法
  18. Leetcode1905. 统计子岛屿(medium)
  19. SAP PP物料清单BOM主数据概念
  20. 计算机专业在线杂志,计算机类的cscd期刊汇总

热门文章

  1. mac air 分区以后 分区内存消失了
  2. Webstorm如何下载插件
  3. java项目 ppt,Java项目报告ppt
  4. 浅析双11背后的电商IT基础架构
  5. 蓝丝雨零基础学习按键精灵VIP教程合集
  6. Python—— 文件和数据格式化(模块6: wordcloud库的使用)(实例:自动轨迹绘制政府工作报告词云)
  7. HP Proliant DL360 G9使用业务网卡登录ILO管理
  8. codeblocks怎么编程c语言,如何能使用Codeblocks进行C语言编程操作.doc
  9. 计算机网络 全章节思维导图
  10. 必备浏览器插件,不用安装音乐软件全家桶,轻松下载全网音乐!