我的任务是将perl制作的crypt函数转换为PHP代码.一切正常,除了这个:
Perl的:
$wert = Encode::encode( "utf8",$wert ); $len=length $wert; $pad = ($len % 16)?"0".chr(16 - ($len % 16)):"10"; $fuell = pack( "H*",$pad x (16 - $len % 16));
PHP:
$wert = utf8_encode($wert); $len = mb_strlen($wert); $pad = ( $len%16 ) ? '0'.chr(16 - ($len%16)) : '10'; $fuell = pack("H*",str_repeat($pad,(16 - $len % 16)));
PHP版本适用于某些字符串.但是当我有’2010-01-01T00:00:00.000’这样的东西时,perl版本没有任何错误,PHP版本打印“PHP Warning:pack():Type H:非法十六进制数字”.
编辑:
这是我要转换成PHP的完整功能.它是由一家公司的程序员制作的,它不再适用于我们,所以我无法真正说明原意是什么.
sub crypt { my $self = shift; my ($wert,$pw)= @_; $wert = Encode::encode( "utf8",$wert ); $pw = Encode::encode( "utf8",$pw ); $len=length $wert; $pad = ($len % 16)?"0".chr(16 - ($len % 16)):"10"; $fuell = pack( "H*",$pad x (16 - $len % 16)); $wert=$wert.$fuell; $lenpw=length $pw; $fuell = ($lenpw % 16)? pack ("H*","00" x (16 - $lenpw % 16)):""; $pw=$pw.$fuell; $cipher = new Crypt::Rijndael $pw,Crypt::Rijndael::MODE_CBC; $cipher->set_iv($pw); $crypted = encode_base64($cipher->encrypt($wert),""); return $crypted; }