我正在编写一个访问加密 MySQL 数据库的 PHP 网站。该数据库目前是 VB.Net Windows 窗体程序的后端。这一切正常,但我希望 PHP 网站访问一些数据并能够对其进行解密/加密。这些字段使用最初由 David Ireland 在 VB6 中编写的 Blowfish 代码进行加密,并由 Todd Acheson 通过我自己的一些调整进行转换。
对于我见过的 PHP Blowfish 示例,$iv 是随机设置的,但我需要将其设置为与在 VB 中创建的相同,因此我试图将 VB 代码转换为 PHP。
我已经开始逐行转换代码,从技术角度来看,似乎还可以,但是测试它的第一部分并没有提供与 VB 相同的结果
设置密钥:
Dim aKey() as Byte = cv_BytesFromHex(MySecretKey)
M = Len(sInputHex) \ 2
ReDim aBytes(M - 1)
For i = 0 To M - 1
Dim x = "&H" & Mid(sInputHex, i * 2 + 1, 2)
Debug.Print(x + " " + Val(x).ToString)
aBytes(i) = Val(x)
Next
cv_BytesFromHex = aBytes 'CopyArray(aBytes)
Return cv_BytesFromHex
End Function
将此函数转换为 PHP5。
public function cv_BytesFromHex($inputstring)
{
// Returns array of bytes from hex string in big-endian order
// e.g. shex="fedc80" will return array {&hfe, &hdc, &h80}
$i=0;
$m=0;
if (strlen($inputstring)/2 <> (int)(strlen($inputstring)/2)) {
$inputstring = "0".$inputstring;
}
$m = strlen($inputstring)/2;
echo 'Length '.strlen($inputstring).' = '.$m." elements</br>";
$abytes=array_fill(0,$m-1,0) ;
for ($i=0; $i<=$m-1;$i++) {
$raw=substr($inputstring, $i * 2 , 2);
$hexed=hexdec($raw);
echo 'Raw ='.$raw.' = '.$hexed.'</br>';
$abytes[$i]=$hexed;
}
return $abytes;
}
使用“1check”键进行测试。
VB输出:
&H1C 28
&Hhe 0
&Hck 12
PHP输出:
Length 6 = 3 elements
Raw =1c = 28
Raw =he = 14
Raw =ck = 12
所以..在这个例子中,“1C”和“ck”给了我相同的值,但“he”没有
另一个例子:
键 =10stack
等等
&H01 1
&H0s 0
&Hta 0
&Hck 12
php
Length 8 = 4 elements
Raw =01 = 1
Raw =0s = 0
Raw =ta = 10
Raw =ck = 12
这个有效:key =1234wxyz
等等
&H12 18
&H34 52
&Hwx 0
&Hyz 0
php
Raw =12 = 18
Raw =34 = 52
Raw =wx = 0
Raw =yz = 0
有谁知道为什么?
小唯快跑啊