您的足迹:首页 > 经验技术 >【转】酷我音乐盒 krc格式文件解包

【转】酷我音乐盒 krc格式文件解包

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.IO.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 
namespace krcdec
{
    class KRC : IDisposable
    {
 
        //异或加密 密钥
        public static char[] EncKey = { '@', 'G', 'a', 'w', '^', '2', 't', 'G', 'Q', '6', '1', '-', 'Î', 'Ò', 'n', 'i' };
 
 
        FileStream fs = null;
 
        //头部4字节
        byte[] HeadBytes;
 
        //异或加密内容
        byte[] EncodedBytes;
 
        //解异或加密后ZIP数据
        byte[] ZipBytes;
 
        //UNZIP后数据
        byte[] UnzipBytes;
 
 
        public KRC()
        {
             
        }
 
        public string Decode(string FilePath)
        {
 
            fs = new FileStream(FilePath, FileMode.Open);
 
            HeadBytes = new byte[4];
            EncodedBytes = new byte[fs.Length];
            ZipBytes = new byte[fs.Length];
 
            fs.Read(HeadBytes, 0, 4);
 
            fs.Read(EncodedBytes, 0, (int)(fs.Length));
 
            int EncodedBytesLength = EncodedBytes.Length;
 
            for (int i = 0; i < EncodedBytesLength; i++)
            {
                int l = i % 16;
 
                ZipBytes[i] = (byte)(EncodedBytes[i] ^ EncKey[l]);
            }
            UnzipBytes = unzipFileStream(ZipBytes);
            string s = Encoding.UTF8.GetString(UnzipBytes);
            return s;
        }
 
 
        byte[] unzipFileStream(byte[] data)
        {
            Inflater inf = new Inflater(false);
            Deflater def = new Deflater();
 
 
 
 
            MemoryStream memoryStream = new MemoryStream();
            byte[] buffer = new byte[1024];
            int buffer_len = 0;
            using (InflaterInputStream input = new InflaterInputStream(new MemoryStream(data), inf))
            {
                do
                {
                    buffer_len = input.Read(buffer, 0, buffer.Length);
                    memoryStream.Write(buffer, 0, buffer_len);
                    input.Flush();
                }
                while (buffer_len > 0);
 
                input.Close();
            }
 
            memoryStream.Close();
            buffer = null;
            return memoryStream.ToArray();
        }
 
 
 
        public void Dispose()
        {
            fs.Close();
        }
 
        public void GetDateTime()
        {
        }
 
 
    }
}
转自 http://www.cnblogs.com/binsys/articles/2124157.html
本博客所有文章如无特别注明均为原创。作者:Lance.Moe复制或转载请以超链接形式注明转自 Lance's Blog
原文地址《【转】酷我音乐盒 krc格式文件解包

相关推荐

网友评论(0)