Litteraly,我正在为此自杀。这应该是一件小事,但我已经花了大约几个小时了。
function ssl_encrypt($pass, $data) {
$salt = substr(md5(mt_rand(), true), 8);
$key = md5($pass . $salt, true);
$iv = md5($key . $pass . $salt, true);
$ct = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $data,
MCRYPT_MODE_CBC, $iv);
return base64_encode('Salted__' . $salt . $ct);
}
$key = ssl_encrypt('super', trim($_POST['pass']));
我正在加密一个字符串并保存到文件中:
$value = $_POST['service'] . "=" . $key . "n";
file_put_contents($file, $value , FILE_APPEND);
它输出如下内容:
U2FsdGVkX1+0NB4++Kx28hUWNGwIqBoabI2O22U1TbpJ0n4FhzZvGtmSWiP7VOZj⏎
我认为最后一个符号是这个""来自
$value = $_POST['service'] . "=" . $key . "n";
我什至尝试过这样的事情:
$value = $_POST['service'] . "=" . $key.PHP_EOL;
$fh = fopen($file,"a+");
fwrite($fh, $value); //write to txtfile
fclose($fh);
它仍然输出这个:
U2FsdGVkX1+0NB4++Kx28hUWNGwIqBoabI2O22U1TbpJ0n4FhzZvGtmSWiP7VOZj⏎
如何摆脱最后一个退格符号?请注意,在这种情况下,子字符串不是一个选项。
这就是我解密的方式:
function ssl_decrypt($pass, $data) {
$data = base64_decode($data);
$salt = substr($data, 8, 8);
$ct = substr($data, 16);
$key = md5($pass . $salt, true);
$iv = md5($key . $pass . $salt, true);
$pt = mcrypt_decrypt (MCRYPT_RIJNDAEL_128, $key, $ct,
MCRYPT_MODE_CBC, $iv);
return $pt;
}
$Loader = new josegonzalezDotenvLoader($pathtoenv);
解析 .env 文件
$environment = (new josegonzalezDotenvLoader($pathtoenv))
->parse()
->toArray();
$digitalpass = ssl_decrypt('super', (string)$_ENV['digital']);
我认为有很多方法可以做到这一点:
- 使用 substr() 删除最后一个字符:
substr($output, 0, -1);
- 使用 chop() 删除所需的字符串:
chop($output,"⏎");
- 或者也许使用 trim(),就像肯尼说的那样:
trim($output)
使用以下代码片段从字符串中删除所有不可打印的字符:
$trimmedVal = preg_replace("/s+|[[:^print:]]/", "", $value)