我正在使用德尔福2009年和我见过的大部分答案是2010+ 我想同步加密(delphi)解密(php)和失败。如何同步delphi和php之间的加密使用dcpcrypt
产生在delphi加密的字符串:在PHP
program Project4;
{$APPTYPE CONSOLE}
uses
SysUtils,
DCPcrypt2,
DCPsha1,
DCPblockciphers,
DCPdes,
EncdDecd;
var des: tdcp_des;
enc,dec: ansistring;
begin
try
des:=tdcp_des.Create(nil);
des.InitStr('test', tdcp_sha1);
enc:=encodestring(des.EncryptString('this is a test'));
des.Free;
des:=tdcp_des.Create(nil);
des.InitStr('test', tdcp_sha1);
dec:=des.DecryptString(decodestring(enc));
des.Free;
writeln(enc);
writeln(dec);
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
解密:
<?php
function decrypt($str, $key)
{
$size = mcrypt_get_iv_size(MCRYPT_DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
$data = base64_decode($str);
$block = mcrypt_get_block_size('des', 'ecb');
$k = substr(sha1($key), 0, $block);
$str = mcrypt_decrypt(MCRYPT_DES, $k, $data, MCRYPT_MODE_CBC, $iv);
$pad = ord($str[($len = strlen($str)) - 1]);
return substr($str, 0, strlen($str) - $pad);
}
$enc = 'TW5mbVFhODUyR2FoOTA2WWJIOD0=';
$dec = decrypt($enc, 'test');
echo "$dec\n";
?>
我认为没有理由会有德尔福2009年和德尔福2010年你是如何“失败”之间的这段代码显著差异? – 2013-02-21 05:58:50
解密的输出为空 – Daniel 2013-02-21 07:41:08
@Daniel in“test”是一个unicode字符串,try –
ComputerSaysNo
2013-02-21 12:13:11