【发布时间】:2014-10-11 22:28:34
【问题描述】:
我正在尝试在 PHP 和 Delphi 之间进行加密和解密。
我的 PHP 代码是;
<?php
error_reporting(E_ALL);
$key = "5y';syhl0ngl4st1ngdfvt5tt";
function decrypt1($string, $key){
$y = 1;
for ($x = 1;$i < strlen($string); $i++) {
$a = (ord($string[$x]) and 0x0f) ^ (ord($key[$y]) and 0x0f);
$string[$x] = chr((ord($string[$x]) and 0xf0) + $a);
$y++;
if ($y > strlen($key)) $y = 1;
}
return $string;
}
echo decrypt1(base64_decode("cWx0fw=="),$key);
?>
我的 Delphi 是;
function Decrypt1(Str : String; Key: string): AnsiString;
var
X, Y : Integer;
A : Byte;
begin
Y := 1;
for X := 1 to Length(Str) do
begin
A := (ord(Str[X]) and $0f) xor (ord(Key[Y]) and $0f);
Str[X] := char((ord(Str[X]) and $f0) + A);
Inc(Y);
If Y > length(Key) then Y := 1;
end;
Result := Str;
end;
function Encrypt(Str : String; Key: string): String;
begin
result:= Decrypt1(str,key);
result:= EncodeBase64(result);
end;
加密/解密不起作用。当试图从 PHP 中的 Delphi 解码编码值时,我得到了一堆垃圾。
我感觉这可能与字符编码有关?
【问题讨论】:
-
Delphi 使用 Ansi 或从 D2009 开始使用 UTF16 和 PHP 使用 UTF8。您必须确保使用相同的编码。
-
第一步是停止使用字符串来保存字节数组。使用
TBytes。这是我们遇到的关于加密的最大误解。加密对二进制数据而不是文本进行操作。
标签: php delphi encryption delphi-xe6