2013-07-07 71 views
2

原始地址加密和在PHP解密不工作

/category.php?id=28 

encryptiong

/category.php?id=DyAtftpy3cg4RNtJWT51vFlU5fMVuN+bvaTC365XYkU= 

function encryptIt($q) { 
    $cryptKey = 'qJB0rGtIn5UB1xG03efyCp'; 
    $qEncoded  = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), $q, MCRYPT_MODE_CBC, md5(md5($cryptKey)))); 
    return $qEncoded; 
} 

後解密

decryptIt($_REQUEST['id']); 

使用的功能

function decryptIt($q) { 
    $cryptKey = 'qJB0rGtIn5UB1xG03efyCp'; 
    $qDecoded  = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), base64_decode($q), MCRYPT_MODE_CBC, md5(md5($cryptKey))), "\0"); 
    return $qDecoded; 
} 

但它返回���.�_��JC �\Y|{�[=4�V!�o$��

+1

這是什麼意思?這不會保護任何人不受任何傷害。你當然想通過這個? – arkascha

+0

使用固定的IV會破壞CBC的目的並大幅降低您的安全性。 – SLaks

+0

既然你的密鑰已經不是祕密了,那麼加密就沒用了。 – ntoskrnl

回答

3
base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), 
    $q, MCRYPT_MODE_CBC, md5(md5($cryptKey)))); 

應該

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), 
    $var, MCRYPT_MODE_CBC, md5(md5($cryptKey)))); 

什麼$q?它應該不是$var(在encryptIt

爲我工作

function decryptIt($data, $key) { 
    $key = md5($key); 
    $data = base64_decode($data); 
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 
     $key, $data, MCRYPT_MODE_CBC, md5($key)); 
    $decrypted = rtrim($decrypted, "\0"); 
    return $decrypted; 
} 
function encryptIt($data, $key) { 
    $key = md5($key); 
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 
     $key, $data, MCRYPT_MODE_CBC, md5($key)); 
    $encrypted = base64_encode($encrypted); 
    return $encrypted; 
} 
// Testing 
header('Content-Type: text/plain'); 
$data = 'testing'; 
$key = 'qJB0rGtIn5UB1xG03efyCp'; 
$encrypted = encryptIt($data, $key); 
// Added your own data here (IT WORKS) 
$encrypted = 'DyAtftpy3cg4RNtJWT51vFlU5fMVuN+bvaTC365XYkU='; 
echo 'Encrypted: ', $encrypted, '<br>', PHP_EOL; 
$decrypted = decryptIt($encrypted, $key); 
echo 'Decrypted: ', $decrypted, '<br>', PHP_EOL; 

^不知道你做錯了什麼,但我做了一件:我停下鱗片指令瘋狂。變量分配到每個並提出代碼清晰,容易跟蹤和......功能...我認爲:)

PS很高興有單行,但它會折磨你,如果你有1線內的錯誤。

+0

我用這個函數encryptIt($ q)mycode ...在這裏錯誤地複製了 – Dhamu

+0

問題沒有解決... – Dhamu

+0

改變了輸入$ q – Dhamu

1

好吧,我的最後一個帖子被刪除...

我看到了它正在對CLI而不是通過Apache。

這是我的解決方案:

decryptit(htmlentities($_GET['i'],ENT_QUOTES | ENT_IGNORE, "UTF-8")); 

順便說一句,我現在使用的代碼PHP手冊。

Regards