首页 > 代码库 > 酷狗.Krc加密歌词解析

酷狗.Krc加密歌词解析

 1 function KrcToLrc(filename: string): string; 2   function ZDecompressStr2(const S: TBytes): UTF8String; 3   var 4     BIn, BOut: TBytes; 5   begin 6     BIn := S; 7     ZDecompress(BIn, BOut); 8     Result := TEncoding.UTF8.GetString(BOut); 9   end;10 11 const12     miarry: array [0 .. 15] of Char = (@, G, a, w, ^, 2, t, G,13     Q, 6, 1, -, Î, Ò, n, i);14 var15   Stream: TFileStream;16   Top: array [0 .. 3] of byte;17   k, j, l: Integer;18   zip_byte: TBytes;19   FileNameBuff: string;20 begin21   FileNameBuff := ExtractFileExt(LowerCase(filename));22   if FileNameBuff <> .krc then begin23     result:=‘‘;24     Exit;25   end;26 27   Stream := TFileStream.Create(filename, fmOpenReadWrite);28   try29     j := Stream.SIZE;30     SetLength(zip_byte, j - 4);31     Stream.read(Top, 4);32     Stream.read(zip_byte, j - 4);33   finally34     Stream.Free;35   end;36 37   for k := Low(zip_byte) to High(zip_byte) do begin38     l := k mod 16;39     zip_byte[k] := zip_byte[k] xor byte(miarry[l]);40   end;41 42   result:= ZDecompressStr2(zip_byte);43 44  end;

对应的Delphi版本为Unicode版本  D7的Ansi版本不使用,添加System.Zlib即可使用

酷狗的异或加密串是从一位JAVA那边得到的

Top4字符是加密文件头,用于校验

Zip_byte是正文

酷狗.Krc加密歌词解析