首页
社区
课程
招聘
[求助]有人能帮我把这段很短的delphi代码翻译成C代码吗
发表于: 2010-1-28 16:08 4507

[求助]有人能帮我把这段很短的delphi代码翻译成C代码吗

2010-1-28 16:08
4507
是两个函数,很短的

Function EncrypKey (Src:String; Key:String):string;
var
idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
Range :Integer;

begin
KeyLen:=Length(Key);
if KeyLen = 0 then key:='Think Space';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;

Randomize;
offset:=Random(Range);
dest:=format('%1.2x',[offset]);
for SrcPos := 1 to Length(Src) do
begin
SrcAsc:=(Ord(Src[SrcPos]) + offset) MOD 255;
if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
dest:=dest + format('%1.2x',[SrcAsc]);
offset:=SrcAsc;
end;
Result:=Dest;
end;

Function UncrypKey (Src:String; Key:String):string;
var
idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
Range :Integer;

begin
KeyLen:=Length(Key);
if KeyLen = 0 then key:='Think Space';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
offset:=StrToInt('$'+ copy(src,1,2));
SrcPos:=3;
repeat
SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;
TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= offset then
TmpSrcAsc := 255 + TmpSrcAsc - offset
else
TmpSrcAsc := TmpSrcAsc - offset;
dest := dest + chr(TmpSrcAsc);
offset:=srcAsc;
SrcPos:=SrcPos + 2;
until SrcPos >= Length(Src);
Result:=Dest;
end;

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
String __fastcall EncrypKey ( String Src, String Key )
{
  String result;
  int idx;
  int KeyLen;
  int KeyPos;
  int offset;
  String dest;
  int SrcPos;
  int SrcAsc;
  int TmpSrcAsc;
  int Range;
  KeyLen = Key.Length ( );
  if ( KeyLen == 0 )
    Key = "Think Space";
  KeyPos = 0;
  SrcPos = 0;
  SrcAsc = 0;
  Range = 256;
  Randomize;
  offset = Random ( Range );
  dest = format ( "%1.2x", __0 );
  for ( SrcPos = 1; SrcPos != Src.Length ( ); SrcPos ++ )
    {
      SrcAsc = ( int ( Src [ SrcPos ] ) + offset ) % 255;
      if ( KeyPos < KeyLen )
        KeyPos = KeyPos + 1;
      else
        KeyPos = 1;
      SrcAsc = SrcAsc ^ int ( Key [ KeyPos ] );
      dest = dest + format ( "%1.2x", __1 );
      offset = SrcAsc;
    }
  result = dest;
  return result;
}
String __fastcall UncrypKey ( String Src, String Key )
{
  String result;
  int idx;
  int KeyLen;
  int KeyPos;
  int offset;
  String dest;
  int SrcPos;
  int SrcAsc;
  int TmpSrcAsc;
  int Range;
  KeyLen = Key.Length ( );
  if ( KeyLen == 0 )
    Key = "Think Space";
  KeyPos = 0;
  SrcPos = 0;
  SrcAsc = 0;
  Range = 256;
  offset = StrToInt ( "$" + Src.SubString ( 1, 2 ) );
  SrcPos = 3;
  do
  {
    SrcAsc = StrToInt ( "$" + Src.SubString ( SrcPos, 2 ) );
    if ( KeyPos < KeyLen )
      KeyPos = KeyPos + 1;
    else
      KeyPos = 1;
    TmpSrcAsc = SrcAsc ^ int ( Key [ KeyPos ] );
    if ( TmpSrcAsc <= offset )
      TmpSrcAsc = 255 + TmpSrcAsc - offset;
    else
      TmpSrcAsc = TmpSrcAsc - offset;
    dest = dest + char ( TmpSrcAsc );
    offset = SrcAsc;
    SrcPos = SrcPos + 2;
  }
  while ( ! ( SrcPos >= Src.Length ( ) ) );
  result = dest;
  return result;
}
2010-1-28 16:34
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
3
2010-1-28 16:40
0
雪    币: 1068
活跃值: (1242)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没学过delphi的话 看这些代码可真是云里雾里啊。。。
2010-1-28 18:59
0
雪    币: 56
活跃值: (276)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
路过,看看顶一下。
2010-1-28 20:44
0
雪    币: 156
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
极度感谢zapline老兄啊~~~
2010-1-29 10:23
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看VB的和DELPI代码头就疼。
2010-1-29 10:34
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=rockinuk;753446]See http://bbs.pediy.com/showthread.php?t=106070[/QUOTE]

用的正是这个50kx  真爽
2010-1-30 00:34
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
路过,顶.........
2010-1-30 12:38
0
雪    币: 2687
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
其实不论什么语言,只要有C基础,很容易看明白的。看来楼主很懒啊!
2010-1-30 16:10
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
就是就是      自己研究研究嘛
2010-2-1 18:10
0
游客
登录 | 注册 方可回帖
返回
//