我在使用xor运算符时遇到了一些麻烦.
我有一个visual basic应用程序,它具有以下功能:
numeroCaracter = Asc(password.Substring(contador, 1)) Xor Asc(CadenaEncriptacion.Substring(contador, 1))
password是函数接收的字符串,CadenaEncriptacion是这个常量:
Private Const CadenaEncriptacion As String = "eNcRiPtAcIoNmUyChUlAyGuAyDeLpArAgUaYeNcRiPtAcIoNmUyChUlAyGuAyDeLpArAgUaYeNcRiPtAcIoNmUyChUlAyGuAyDeLpArAgUaYeNcRiPtAcIoNmUyChUlAyGuAyDeLpArAgUaY"
我需要将函数转换为PHP,我通过这种方式转换该行:
$numeroCaracter = ord(substr($password, $contador, 1)) xor ord(substr($CadenaEncriptacion, $contador, 1));
PHP中的ord函数和vb中的asc在两种语言中都给出相同的值,但是在XOR运算符中,numeroCaracter在PHP和VB中具有不同的值…
在php中,numeroCaracer始终是每个字符的ord值,在vb中,asc函数给我其他值.
谢谢!
解决方法:
因为php xor的优先级低于=你的代码被解释为:
($numeroCaracter = ord(substr($password, $contador, 1))) xor ord(substr($CadenaEncriptacion, $contador, 1));
因此,$numeroCaracter获取ord的值(substr($password,$contador,1)).添加括号或使用^运算符而不是xor:
$numeroCaracter = ord(substr($password, $contador, 1)) ^ ord(substr($CadenaEncriptacion, $contador, 1));