字符串加密问?(50分)

H

hc

Unregistered / Unconfirmed
GUEST, unregistred user!
function Encrypt(const S: String
Key: Word): String;
var
I: byte;
begin
Result[1] := S[1];
for I := 2 to Length(S) do begin
Result := char(byte(S) xor (Key shr 8));
Key := (byte(Result) + Key) * C1 + C2;
end;
end;
抄来的。运行出错。
xxx.exe raised exception class EAccessViolation with message 'Access
violation at address 004B0DC2 in module 'xxx.exe'.Write of address
00000000'..................
 
请用如下加解密函数
function cryptstr(const s:string
stype: dword):string;
var
i: integer;
fkey: integer;
begin
result:='';
case stype of
0:
begin
randomize;
fkey := random($ff);
for i:=1 to length(s) do
result := result+chr( ord(s) xor i xor fkey);
result := result + char(fkey);
end;
1:
begin
fkey := ord(s[length(s)]);
for i:=1 to length(s) - 1 do
result := result+chr( ord(s) xor i xor fkey);
end;
end;
 
这样就可以了
function Encrypt(const S: String
Key: Word): String;
var
I: byte;
begin
Result:=S;
Result[1] := S[1];
for I := 2 to Length(S) do begin
Result := char(byte(S) xor (Key shr 8));
Key := (byte(Result) + Key) * C1 + C2;
end;
end;
 
在你的程序中,没有为Result分配空间,导致运行出错。楼上在对Result进行修改之前用
Result:=S;对其分配了空间(与S一样长,内容也一样),以后的操作就没有出错。
其实,如果仅仅是为了分配空间,下面的方法更直观,运行起来可快一些(没有进行内容
复制,而上面的方法不但分配了空间,还使Result的内容与S完全一致,而这是多余的):
SetLength(Result,Length(S));

OK
 
各位,请问解密和加密是不是用同一个函数。
C1和C2是什么?
 
各位
谁有C++Builder的字符串加密例子,急用,DELPHI的不用了,因为已经有DELPHI的了,但怎也
转不到C++Builder,如果谁有C++Builder的请寄:drroc@21cn.com
或贴:http://www.delphibbs.com/delphibbs/dispq.asp?lid=759801
即发分
 
//各位,请问解密和加密是不是用同一个函数。
//C1和C2是什么?
解密和加密不是用同一个函数。
C1和C2是密钥的一部分。可以随时改变。
 
问题已经由zhhc,解决
creation-zy说很清楚了
 
顶部