哪位可以将这个函数转成VC的代码呀,不是我懒,实在是不会呀!谢谢您了! ( 积分: 36 )

  • 主题发起人 主题发起人 hylly
  • 开始时间 开始时间
H

hylly

Unregistered / Unconfirmed
GUEST, unregistred user!
{===============================================================================
功 能: 加/解密函数

参 数:
s string 要加/解密的字符串
Key Word 加/解密关键字
bEncrypt Boolean 加密 True 解密 False
返回值: 加/解密后的字符串 string
备 注:
SeedA 加/解密关键字
SeedB 加/解密关键字
SeedA = 5899;
SeedB = 5900;
Key = 444;
===============================================================================}
function Crypt(const s: string;
Key: Word;
const bEncrypt: Boolean = True): string;
var
i : Integer;
ps, pr: ^byte;
begin
SetLength(Result, Length(s));
ps := @s[1];
pr := @Result[1];
for i := 1 to length(s)do
begin
pr^ := ps^ xor (Key shr 8);
if bEncrypt then
Key := (pr^ + Key) * SeedA + SeedB
else
Key := (ps^ + Key) * SeedA + SeedB;
pr := pointer(integer(pr) + 1);
ps := pointer(integer(ps) + 1);
end
end;
 
{===============================================================================
功 能: 加/解密函数

参 数:
s string 要加/解密的字符串
Key Word 加/解密关键字
bEncrypt Boolean 加密 True 解密 False
返回值: 加/解密后的字符串 string
备 注:
SeedA 加/解密关键字
SeedB 加/解密关键字
SeedA = 5899;
SeedB = 5900;
Key = 444;
===============================================================================}
function Crypt(const s: string;
Key: Word;
const bEncrypt: Boolean = True): string;
var
i : Integer;
ps, pr: ^byte;
begin
SetLength(Result, Length(s));
ps := @s[1];
pr := @Result[1];
for i := 1 to length(s)do
begin
pr^ := ps^ xor (Key shr 8);
if bEncrypt then
Key := (pr^ + Key) * SeedA + SeedB
else
Key := (ps^ + Key) * SeedA + SeedB;
pr := pointer(integer(pr) + 1);
ps := pointer(integer(ps) + 1);
end
end;
 
CString Crypt(CString s, BYTE Key, BOOL bEncrypt/*=True*/)
{
int i;
BYTE ps, pr;
SetLength(Result, Length(s));
ps = s[1];
pr = Result[1];
for( i = 0;
i < length(s);
i++){
pr2 = ps2 | (Key);
if(bEncrypt){
Key = (pr2 + Key) * SeedA + SeedB
}
else
{
Key = (ps2 + Key) * SeedA + SeedB;
pr = pointer(int(pr) + 1);
ps = pointer(int(ps) + 1);
}
}
}
我不知道原来用什么语言写的,大概是这个样子的:)
 
昏,不知道是什么语言写的,都能翻译.......
是用pascal语言delphi编译器
 
lihongzhai写的错误还真多[:D]
按照自己理解,似乎应该这样(考虑到字符中可能有ASCII值大于127的,所以用了BYTE类型)
PBYTE Crypt(PBYTE s, WORD Key, BOOL bEncrypt/*=True*/)
{
int i;
PBYTE ps, pr;
PBYTE szRet;
szRet = new BYTE[strlen((char *)s)];
ps = s;
pr = szRet;
for (i = 0;
i < strlen((char *)s);
++i)
{
*pr = *ps ^ (Key >> 8);
if (bEncrypt)
{
Key = (*pr + Key) * SeedA + SeedB;
}
else
{
Key = (*ps + Key) * SeedA + SeedB;
}
++pr;
++ps;
}
return szRet;
}
记得调用的地方用完返回的字符数组以后要把它delete掉,否则就内存泄漏了
 
多人接受答案了。
 
后退
顶部