xor运算符在PHP和Visual Basic中的工作方式不同

mso*_*lla 3 php vb6 vba

我在使用xor运算符时遇到了一些麻烦.

我有一个visual basic应用程序,它具有以下功能:

numeroCaracter = Asc(password.Substring(contador, 1)) Xor Asc(CadenaEncriptacion.Substring(contador, 1))
Run Code Online (Sandbox Code Playgroud)

password是函数接收的字符串,CadenaEncriptacion是这个常量:

Private Const CadenaEncriptacion As String = "eNcRiPtAcIoNmUyChUlAyGuAyDeLpArAgUaYeNcRiPtAcIoNmUyChUlAyGuAyDeLpArAgUaYeNcRiPtAcIoNmUyChUlAyGuAyDeLpArAgUaYeNcRiPtAcIoNmUyChUlAyGuAyDeLpArAgUaY"
Run Code Online (Sandbox Code Playgroud)

我需要将函数转换为PHP,我通过这种方式转换该行:

$numeroCaracter = ord(substr($password, $contador, 1)) xor ord(substr($CadenaEncriptacion, $contador, 1));
Run Code Online (Sandbox Code Playgroud)

PHP中的ord函数和vb中的asc在两种语言中都给出相同的值,但是在XOR运算符中,numeroCaracter在PHP和VB中具有不同的值...

在php中,numeroCaracer始终是每个字符的ord值,在vb中,asc函数给我其他值.

谢谢!

u_m*_*der 5

作为PHP xor具有较低的比优先级=代码这样解释:

($numeroCaracter = ord(substr($password, $contador, 1))) xor ord(substr($CadenaEncriptacion, $contador, 1));
Run Code Online (Sandbox Code Playgroud)

所以,$numeroCaracter获得价值ord(substr($password, $contador, 1)).添加括号或使用^运算符而不是xor:

$numeroCaracter = ord(substr($password, $contador, 1)) ^ ord(substr($CadenaEncriptacion, $contador, 1));
Run Code Online (Sandbox Code Playgroud)