我正在玩php中的加密/解密编码。有趣的东西!
但是,我遇到了一些涉及文本加密的问题。
这是加密和解密字符串的2个函数。它使用加密密钥,我将其设置为模糊不清的东西。 我实际上从一本php书中得到了这个。我略微修改了它,但没有改变它的主要目标。
我在下面创建了一个小例子,任何人都可以测试 但是,我注意到一些字符显示为“加密”字符串。像“=”和“+”这样的字符。 有时我通过url传递这个加密的字符串。这可能不适合我的接收脚本。我猜测如果看到某些字符,浏览器会对字符串执行某些操作。我真的只是在猜测。
我可以使用另一个函数来确保浏览器不会触及字符串吗?或者有没有人知道足够的php bas64_encode()来禁止使用某些字符?我真的不希望后者成为可能。但是,我确信有一个解决办法。
享受代码,无论谁需要它!
define('ENCRYPTION_KEY', "sjjx6a");
function encrypt($string) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr(ENCRYPTION_KEY, ($i % strlen(ENCRYPTION_KEY))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result)."/".rand();
}
function decrypt($string){
$exploded = explode("/",$string);
$string = $exploded[0];
$result = '';
$string = base64_decode($string);
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr(ENCRYPTION_KEY, ($i % strlen(ENCRYPTION_KEY))-1, 1);
$char = chr(ord($char)-ord($keychar));
$result.=$char;
}
return $result;
}
echo $encrypted = encrypt("reaplussign.jpg");
echo "<br>";
echo decrypt($encrypted);
答案 0 :(得分:3)
您可以使用PHP的urlencode和urldecode函数来确保您的加密结果可以安全地用于网址,例如
echo $encrypted = urlencode(encrypt("reaplussign.jpg"));
echo "<br>";
echo decrypt(urldecode($encrypted));
答案 1 :(得分:0)
您应该查看urlencode()以正确转义字符串,以便在查询中使用。
答案 2 :(得分:0)
如果你担心+,=等类似的角色,你应该看看http://php.net/manual/en/function.urlencode.php,并且它是来自“另请参阅”部分的朋友。在encrypt()中编码并在decrypt()的开头解码。
如果这对您不起作用,可能是一些简单的替换?
$text = str_replace('+','%20',$text);