我有一個PHP腳本,通過下面的方法做一個字符串的基本加密加號:PHP - 用GET查詢
<?php
$key = 'secretkey';
$string = $_GET['str'];
if ($_GET['method'] == "decrypt")
{
$output = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}
if ($_GET['method'] == "encrypt")
{
$output= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}
echo $output;
?>
的URL字符串進行加密的一個例子是這樣的:
?Encrypt.php方法=加密&海峽=快速狐狸
這將返回這是加密的字符串:
LCUT/ieVa6cl3/4VtzE + jd9QPT3kvHY YJFqG6tY3P0Q =
現在對字符串進行解密所有你需要做的就是改變「方法」查詢「解密」,像這樣:
Encrypt.php方法=解密&海峽= LCUT/ieVa6cl3/4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
唯一的問題是,當該加密的字符串被解密,它返回這個:
¬ƒ§rYV}̳5Äš·NSSI(ñïX8Þ; b
我已縮小的問題的加號 即在加密的字符串中。 PHP的GET方法似乎將加號轉換爲空格。我搜查了這個bug,發現它已經被提交here。我嘗試過在該頁面上列出的不同方法,其他方面沒有成功。我得到的最接近是通過使用這樣的:
$fixedstring = str_replace(" ", "+", $string);
,然後使用在加密方法$ fixedstring,問題是,解密時,所有空格都轉換爲加號。有任何想法嗎?
我知道使用POST會更有意義,但我使用GET的具體原因。我會省下細節。
我知道這是一個簡單的答案,但我通過GET發送出於某種原因。 – user 2010-04-20 00:53:30
這是您的問題的正確答案。如果要在URL中的任何位置使用文字加號,則無論使用的是哪種服務器端語言,都必須進行編碼,例如將其替換爲「%2B」。這是因爲URL中的加號用作空格字符的替代,任何服務器端腳本都會將它們正確解釋爲空格字符。 – thomasrutter 2010-04-20 02:51:06
啊哎呀我看到這個答案已被編輯。哦,現在是正確的。 +1 – thomasrutter 2010-04-20 02:52:07