为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
动漫人物 2021-11-26 15:59:17
我正在编写一个访问加密 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


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 286 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信