zoukankan      html  css  js  c++  java
  • 酷狗.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 const
    12     miarry: array [0 .. 15] of Char = ('@', 'G', 'a', 'w', '^', '2', 't', 'G',
    13     'Q', '6', '1', '-', 'Î', 'Ò', 'n', 'i');
    14 var
    15   Stream: TFileStream;
    16   Top: array [0 .. 3] of byte;
    17   k, j, l: Integer;
    18   zip_byte: TBytes;
    19   FileNameBuff: string;
    20 begin
    21   FileNameBuff := ExtractFileExt(LowerCase(filename));
    22   if FileNameBuff <> '.krc' then begin
    23     result:='';
    24     Exit;
    25   end;
    26 
    27   Stream := TFileStream.Create(filename, fmOpenReadWrite);
    28   try
    29     j := Stream.SIZE;
    30     SetLength(zip_byte, j - 4);
    31     Stream.read(Top, 4);
    32     Stream.read(zip_byte, j - 4);
    33   finally
    34     Stream.Free;
    35   end;
    36 
    37   for k := Low(zip_byte) to High(zip_byte) do begin
    38     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是正文

  • 相关阅读:
    CE工具里自带的学习工具--第三关
    CE工具里自带的学习工具--第二关
    CE工具里自带的学习工具--第一关
    双向链表
    双向循环链表
    单向循环链表
    单链表
    动手动脑———异常处理
    动手动脑——继承与多态
    类与对象——动手动脑
  • 原文地址:https://www.cnblogs.com/ab0416/p/4087572.html
Copyright © 2011-2022 走看看