여기 한델에 암호화 복호화 함수가 있더군요..
델7에서는 문제가 없었습니다만
2009버전에는 유니코드 문제인지 제대로 안되더라구요...
어떻게 바꿔야 2009에서 쓸 수 있을까요?
아래의 코드 입니다.
function Encrypt(const S: String; Key: Word): String;
var
i : integer;
FirstResult : String;
begin
SetLength(FirstResult, Length(S));
for i := 1 to Length(S) do begin
FirstResult[i] := char(byte(S[i]) xor (Key shr 8));
Key := (byte(FirstResult[i]) + Key) * C1 + C2;
end;
Result := ValueToHex(FirstResult);
end;
function Decrypt(const S: String; Key: Word): String;
var
i : integer;
FirstResult : String;
begin
FirstResult := HexToValue(S);
SetLength(Result, Length(FirstResult));
for i := 1 to Length(FirstResult) do begin
Result[i] := char(byte(FirstResult[i]) xor (Key shr 8));
Key := (byte(FirstResult[i]) + Key) * C1 + C2;
end;
end;
기존 코드를 그대로 가져가실때,
string 을 AnisString 으로 변환하시고, Char 를 AnsiChar로 변환해 주시면 됩니다.
즉, 아래와 같은 형태가 되겠지요..
보니깐 박후선 님의 강좌에 포함된 코드같습니다..,
아래 함수들에 포함된 ValueToHex 등의 사용자 함수도 모두
위에 말씀드린 것 처럼 수정하셔야 정상 동작할겁니다.
P.S : Warning 뜨는것은 AnsiString 을 string(.. 으로 타입캐스팅 해주시면 잠재워 집니다.
그럼~ 즐거운 프로그래밍 하세요~
function Encrypt(const S: AnsiString; Key: Word): AnsiString;
var
i: integer;
FirstResult: AnsiString;
begin
SetLength(FirstResult, Length(S));
for i := 1 to Length(S) do
begin
FirstResult[i] := Ansichar(byte(S[i]) xor (Key shr 8));
Key := (byte(FirstResult[i]) + Key) * C1 + C2;
end;
Result := ValueToHex(FirstResult);
end;
function Decrypt(const S: AnsiString; Key: Word): AnsiString;
var
i: integer;
FirstResult: AnsiString;
begin
FirstResult := HexToValue(S);
SetLength(Result, Length(FirstResult));
for i := 1 to Length(FirstResult) do
begin
Result[i] := Ansichar(byte(FirstResult[i]) xor (Key shr 8));
Key := (byte(FirstResult[i]) + Key) * C1 + C2;
end;
end;