PHP 将十六进制字符串转换为字节数组 - 将 VB.Net 转换为 PHP

我正在编写一个访问加密 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

有谁知道为什么?


动漫人物
浏览 287回答 1
1回答

小唯快跑啊

所以,这里没有错误。h被hexdec忽略,只e被解码。原因... https://en.wikipedia.org/wiki/Hexadecimal没有h:)并且在 VBA Val函数中返回 0,原因he是无效的十六进制组合<?phpfunction myHex($str){&nbsp; if ($str === dechex(hexdec($str))) {&nbsp; &nbsp; return hexdec($str);&nbsp; }&nbsp; return 0;}var_dump(myHex("he"));&nbsp; // returns 0
打开App,查看更多内容
随时随地看视频慕课网APP