首页
社区
课程
招聘
[求助]一个C++加密函数的转换
发表于: 2009-3-1 15:04 3055

[求助]一个C++加密函数的转换

2009-3-1 15:04
3055
C++函数如下

char *crypt(char *Source)
{
       
        int i;
        int v3;
        char Dst[256];
        char Dest[256];
    v3 = strlen(Source);
        strcpy(Dest, Source);
        for ( i = 0; i < v3; ++i )
        {
                Dst[i] = Dest[i] - 8;
        }
        return strcpy(Source, Dst);
}

其中的Dst[i] = Dest[i] - 8;
不明白,字符也可以减8吗?

Function crypt(src:string):string;
var
i:Integer;
dst:string;

begin
for i:=0 to Length(src) do
begin
Dst[i]:= char(strtoint(src[i]) - 8);
end;
Result := Dst;
end;

想翻译成DELPHI的,老是不会,那位大侠能整个DELPHI的版本出来呢?

难道没人愿意还是不会呢?
Function crypt(src:string):string;
var
i:Integer;
dst:string;

begin
for i:=0 to Length(src) do
begin
Dst[i]:= char(strtoint(src[i]) - 8);
end;
Result := Dst;
end;
刚自己改了下,不好用,郁闷

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=dayang;585514]

其中的Dst[i] = Dest[i] - 8;
不明白,字符也可以减8吗?

[/QUOTE]

“字符”只是对人类语言而言的,对机器而言,“字符”类型是没有特殊语义的。在C/C++中,char这个类型,完全等价于一个*8-bit integer*,至于默认是signed还是unsigned,在C++标准中没有定义,由编译器决定(通常可以通过编译器选项来设定),而这个8-bit整数的值,是对人类语言的“字符”的*编码*,采用美国制定的ASCII编码标准。

所以,这里的减8,就是对“字符”的ASCII编码值减8。这个函数的算法,就是类似于凯撒密码的移位算法(唯一区别就是待加密的值空间不同)

[QUOTE=dayang;585514]
Function crypt(src:string):string;
var
i:Integer;
dst:string;

begin
for i:=0 to Length(src) do
begin
Dst[i]:= char(strtoint(src[i]) - 8);
end;
Result := Dst;
end;
刚自己改了下,不好用,郁闷[/QUOTE]

如果理解了“字符”型,这段代码中的错误就应该明白了。

直接用src[i]去减8,结果再赋给dst[i]就行了。不用strtoint。
2009-3-1 17:48
0
游客
登录 | 注册 方可回帖
返回
//