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()
{
}
}
}
项目文件 https://files.cnblogs.com/binsys/110801krcdec.rar