我正在编写一个访问加密 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 12PHP输出:Length 6 = 3 elementsRaw =1c = 28Raw =he = 14Raw =ck = 12所以..在这个例子中,“1C”和“ck”给了我相同的值,但“he”没有另一个例子:键 =10stack等等&H01 1&H0s 0&Hta 0&Hck 12phpLength 8 = 4 elementsRaw =01 = 1Raw =0s = 0Raw =ta = 10Raw =ck = 12这个有效:key =1234wxyz等等&H12 18&H34 52&Hwx 0&Hyz 0phpRaw =12 = 18Raw =34 = 52Raw =wx = 0Raw =yz = 0有谁知道为什么?
1 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
所以,这里没有错误。h被hexdec忽略,只e被解码。原因... https://en.wikipedia.org/wiki/Hexadecimal没有h:)
并且在 VBA Val函数中返回 0,原因he是无效的十六进制组合
<?php
function myHex($str)
{
if ($str === dechex(hexdec($str))) {
return hexdec($str);
}
return 0;
}
var_dump(myHex("he")); // returns 0
- 1 回答
- 0 关注
- 286 浏览
添加回答
举报
0/150
提交
取消