php是我周期性使用的语言之一,但当我再次使用它时,通常必须清除蛛网。这周同样适用,同时我将一些c代码移植到php。这使用了很多aes加密和sha256散列-到目前为止一切正常。但是,解密字符串以“c”形式出现,即以零字节结尾,后跟“垃圾”填充字节。
目前,我将这些c样式字符串“修剪”为php格式,如下所示:

$iv = strpos( $hashsalt8, "\0");
if ($iv)
   $hashsalt8 = substr( $hashsalt8, 0, $iv );

似乎很冗长,应该有一个单行函数调用,但我找不到它?
注意:尽管在本例中“hash salt”名称意味着我可能知道原始字符串的长度,但在一般情况下这是未知的。显然,当长度是先验的时,使用substr()可以得到一个单线解。

最佳答案

使用strstr

$hashsalt8 = strstr($hashsalt8, "\0", TRUE);

对于低于5.3.0版本(第三个参数不可用)的更丑陋的解决方案使用strrevsubstrstrrchr函数:
$hashsalt8 = strrev(substr(strrchr(strrev($hashsalt8), "\0"), 1));

10-04 20:20