2012-02-26 158 views
2

我一直在抓我的头在这一个,即使它不应该如此困难......我试图通过GET查询字符串传递电子邮件不POST我想掩盖此电子邮件只要电子邮件没有显示在网址中,我并不关心是否有好的加密或任何东西......反正我试图加密它并使用mcrypt_generic进行解密。我遇到的问题是加密时,它会将电子邮件转换为各种字符,如:“ñüüŸPsúœœáááagé”我想返回正常的字母数字字符,因此我试图对此执行hex2bin,并且它运行良好问题是在php5中没有bin2hex!我尝试了一些我在网上找到的函数来回复这个改变,它的效果和你所看到的一样,但是如果你比较if语句中的字符串,他们不匹配,所以当我解密它时,它不会返回我最初通过的值相同。无论如何,我想知道是否有人可以给我一些建议,告诉我如何通过GET传递电子邮件,而不必阅读电子邮件,然后在我的代码读取参数时恢复正常。php查询字符串参数

这是我的加密方法和HEX2BIN函数转换器:

function encrypt($data) 
{ 
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, ''); 
if (mcrypt_generic_init($cipher, _QRYKEY, _IVKEY) != -1) 
{ 
    $encrypted_data = mcrypt_generic($cipher,$data); 
    mcrypt_generic_deinit($cipher); 
} 

return bin2hex($encrypted_data); 
} 

function decrypt($data) 
{ 
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, ''); 
if (mcrypt_generic_init($cipher, _QRYKEY, _IVKEY) != -1) 
{ 
    $decrypted_data = mdecrypt_generic($cipher,hex2bin($data)); 
    mcrypt_generic_deinit($cipher); 
} 

return $decrypted_data; 
} 

function hex2bin($h) 
{ 
if (!is_string($h)) return null; 

$r=''; 
for($a=0; $a<strlen($h); $a+=2) 
{ 
    $r.=chr(hexdec($h{$a}.$h{($a+1)})); 
} 

return $r; 
} 
+0

哪里是你的代码,你实际上是加密电子邮件和检索GET字符串? – 2012-02-26 23:08:06

+0

你有没有试过base64?不是加密,但会完成这项工作。 – rodrigoap 2012-02-26 23:09:29

+0

如果你想要hex2bin和bin2hex的替代品,你可以尝试玩“pack”和“unpack”http://www.php.net/manual/en/function.pack.php – Optimist 2012-02-26 23:11:39

回答

4

使用base64_encode()以文本安全格式编码什么,并base64_decode()得到原始数据备份

+0

不能相信它就是这样......我知道它应该比我做的所有事情都简单,但我不能把手指放在它上面......谢谢一堆! – 2012-02-26 23:26:54

2

只需使用urlencode()将另一端的urldecode()`转换为全部的"ñ¯üŸPsúœœ á ag-characters before sending them into the URL and and

http://php.net/manual/en/function.urlencode.php

+0

这不是,但这不应该是这个例子中的问题 – 2012-02-26 23:14:50

+0

我刚刚检查过它,似乎它是二进制安全的,因此可以用作解决方案。这就是为什么我删除了我的评论;-) – zerkms 2012-02-26 23:22:18

+0

:)谢谢你的双重检查。我实际上搜索了它,发现一个随机的参考资料表明它不是,但这很好知道! – 2012-02-26 23:32:04