====== Delphi 7 простое шифрование строки ====== На StackOverflow нашел алгоритм, но он для более новых версий Delphi, так как у клиента Delphi 7 пришлось немного преобразовать написанное для ANSI строк. ===== Мой шифровальщик ===== // Encryption keys (WORD aligned) const CKEY1 = 53761; CKEY2 = 32618; function EncryptStr(const S: String; Key: Word): String; var i : Integer; buffer : array of Word; begin Result := ''; SetLength(buffer, Length(S)); for i := 0 to Length(s)-1 do begin buffer[i] := Word(S[i+1]) xor (Key shr 8); Key := (buffer[i] + Key) * CKEY1 + CKEY2; end; for i := 0 to Length(buffer)-1 do begin Result := Result + IntToHex(buffer[i], 2); end; SetLength(buffer, 0); end; function DecryptStr(const S: String; Key: Word): String; var temp : String; tmpKey: Word; i : Integer; RStr : array of Char; begin Result := ''; temp := UpperCase(S); SetLength(RStr, Length(S) div 2); i := 1; try while (i < Length(temp)) do begin RStr[i div 2] := Chr(StrToInt('$' + temp[i] + temp[i+1])); Inc(i, 2); end; except SetLength(RStr, 0); Exit; end; for i := 0 to Length(RStr)-1 do begin tmpKey := Word(RStr[i]); RStr[i] := Char(Ord(RStr[i]) xor (Key shr 8)); Key := (tmpKey + Key) * CKEY1 + CKEY2; end; Result := String(RStr); SetLength(RStr, 0); end; ===== Оригинальный код автора с StackOverflow ===== Ссылка [[https://stackoverflow.com/questions/6798188/delphi-simple-string-encryption|6798188/delphi-simple-string-encryption]] const CKEY1 = 53761; CKEY2 = 32618; function EncryptStr(const S :WideString; Key: Word): String; var i :Integer; RStr :RawByteString; RStrB :TBytes Absolute RStr; begin Result:= ''; RStr:= UTF8Encode(S); for i := 0 to Length(RStr)-1 do begin RStrB[i] := RStrB[i] xor (Key shr 8); Key := (RStrB[i] + Key) * CKEY1 + CKEY2; end; for i := 0 to Length(RStr)-1 do begin Result:= Result + IntToHex(RStrB[i], 2); end; end; function DecryptStr(const S: String; Key: Word): String; var i, tmpKey :Integer; RStr :RawByteString; RStrB :TBytes Absolute RStr; tmpStr :string; begin tmpStr:= UpperCase(S); SetLength(RStr, Length(tmpStr) div 2); i:= 1; try while (i < Length(tmpStr)) do begin RStrB[i div 2]:= StrToInt('$' + tmpStr[i] + tmpStr[i+1]); Inc(i, 2); end; except Result:= ''; Exit; end; for i := 0 to Length(RStr)-1 do begin tmpKey:= RStrB[i]; RStrB[i] := RStrB[i] xor (Key shr 8); Key := (tmpKey + Key) * CKEY1 + CKEY2; end; Result:= UTF8Decode(RStr); end;