使用base64_encode()进行文本混淆

时间:2010-04-14 05:53:07

标签: php obfuscation

我正在玩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);

3 个答案:

答案 0 :(得分:3)

您可以使用PHP的urlencodeurldecode函数来确保您的加密结果可以安全地用于网址,例如

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);