我正在編寫(xiě)一個(gè)訪(fǎng)問(wèn)加密 MySQL 數(shù)據(jù)庫(kù)的 PHP 網(wǎng)站。該數(shù)據(jù)庫(kù)目前是 VB.Net Windows 窗體程序的后端。這一切正常,但我希望 PHP 網(wǎng)站訪(fǎng)問(wèn)一些數(shù)據(jù)并能夠?qū)ζ溥M(jìn)行解密/加密。這些字段使用最初由 David Ireland 在 VB6 中編寫(xiě)的 Blowfish 代碼進(jìn)行加密,并由 Todd Acheson 通過(guò)我自己的一些調(diào)整進(jìn)行轉(zhuǎn)換。對(duì)于我見(jiàn)過(guò)的 PHP Blowfish 示例,$iv 是隨機(jī)設(shè)置的,但我需要將其設(shè)置為與在 VB 中創(chuàng)建的相同,因此我試圖將 VB 代碼轉(zhuǎn)換為 PHP。我已經(jīng)開(kāi)始逐行轉(zhuǎn)換代碼,從技術(shù)角度來(lái)看,似乎還可以,但是測(cè)試它的第一部分并沒(méi)有提供與 VB 相同的結(jié)果設(shè)置密鑰: 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將此函數(shù)轉(zhuǎn)換為 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”鍵進(jìn)行測(cè)試。VB輸出:&H1C 28&Hhe 0&Hck 12PHP輸出:Length 6 = 3 elementsRaw =1c = 28Raw =he = 14Raw =ck = 12所以..在這個(gè)例子中,“1C”和“ck”給了我相同的值,但“he”沒(méi)有另一個(gè)例子:鍵 =10stack等等&H01 1&H0s 0&Hta 0&Hck 12phpLength 8 = 4 elementsRaw =01 = 1Raw =0s = 0Raw =ta = 10Raw =ck = 12這個(gè)有效:key =1234wxyz等等&H12 18&H34 52&Hwx 0&Hyz 0phpRaw =12 = 18Raw =34 = 52Raw =wx = 0Raw =yz = 0有誰(shuí)知道為什么?
PHP 將十六進(jìn)制字符串轉(zhuǎn)換為字節(jié)數(shù)組 - 將 VB.Net 轉(zhuǎn)換為 PHP
動(dòng)漫人物
2021-11-26 15:59:17