【发布时间】:2020-11-07 01:41:44
【问题描述】:
我在 PHP 中这 2 种类型之间进行转换时遇到了问题。这是我在google中搜索到的代码
function strToHex($string){
$hex='';
for ($i=0; $i < strlen($string); $i++){
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
function hexToStr($hex){
$string='';
for ($i=0; $i < strlen($hex)-1; $i+=2){
$string .= chr(hexdec($hex[$i].$hex[$i+1]));
}
return $string;
}
我查了一下,用异或加密的时候发现了。
我有字符串"this is the test",在与一个键进行异或后,我得到字符串↕↑↔§P↔§P ♫§T↕§↕ 的结果。之后,我尝试通过函数 strToHex() 将其转换为十六进制,我得到了这些12181d15501d15500e15541215712。然后,我用函数 hexToStr() 进行了测试,我得到了↕↑↔§P↔§P♫§T↕§q。那么,我应该怎么做才能解决这个问题呢?为什么我转换这2个样式值会出错?
【问题讨论】:
-
你知道PHP中有
hex2bin()和bin2hex()吗? -
strToHex 返回一个十六进制的 string - 所以如果你直接用
^运算符对它进行异或,那不会给出任何好的结果.也许你可以给 strToHex 另一个参数是你想要异或的数字,并直接在该函数内部进行异或:$hex .= dechex(ord($string[$i]) ^ $MYKEYBYTE); -
我认为问题出在 hexToStr() 函数上。因为在转换成字符串的时候,会传递空格或者一些特殊字符,导致问题
-
我试过 hex2bin() 和 bin2hex()。真的很好解决这个问题。但在实际情况下,它没有。如果我在用密钥对明文进行异或加密后调用 bin2hex() 函数,那就对了。但在实际情况中,我们通常在 XOR 之后使用 strToHex() ,所以当我们对 Crypt 与 KEY 进行异或解密得到明文时,调用 hexToStr() 会得到错误的结果。