![](/img/trans.png)
[英]Coldfusion 3DES encrypt make the encrypted result different to PHP `mcrypt_encrypt`
[英]Encrypted values (mcrypt_encrypt) in URL parameters generating different results while requesting.How to tackle the situation?
我正在使用以下函數,使用密鑰 ($ key)加密字符串 ($ str)以使其成為唯一密鑰。
樣例代碼:
<?php
$key = "####";
$str = "123456789";
$encrypted_key = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))));
echo $encrypted_key; // 3rfmDKb/Ig5FuUnkY8fiHpqA3FD4PflXMksJw+6WAns=
?>
該函數將返回包含特殊字符(包括'+')的值。 我將此值作為唯一ID存儲在數據庫中。
但是在某些情況下,我需要通過URL傳遞$ encrypted_key。 即 與RESFful Web服務一起使用
范例網址:
www.example.com/index.php?encrypted_key=3rfmDKb/Ig5FuUnkY8fiHpqA3FD4PflXMksJw+6WAns=
但這在通過URL請求時會將“ +”解碼為“空格”
碼:
echo $encrypted_key = $_REQUEST['encrypted_key'];
// 3rfmDKb/Ig5FuUnkY8fiHpqA3FD4PflXMksJw 6WAns=
這種轉換進一步影響了數據庫檢查:
針對'3rfmDKb / Ig5FuUnkY8fiHpqA3FD4PflXMksJw + 6WAns ='的'3rfmDKb / Ig5FuUnkY8fiHpqA3FD4PflXMksJw 6WAns ='
我還擔心將這些加密的值存儲到索引的MySQL DB列中。
這里應該采用的最佳做法是什么? 任何建議將不勝感激。
此答案僅解決表示形式,而不是可能的錯誤使用密碼。
當構建具有特殊表示規則的對象(例如數據庫查詢,URL中的路徑,HTML代碼,JS代碼等)時,必須確保對值執行正確的編碼方式,以便它們往返無害。
對於數據庫查詢參數,請勿使用字符串串聯。 使用准備好的語句和占位符。
對於URL,請使用適當的URL編碼功能或URL構建器來構造URL,請勿盲目地將字符串連接起來。
首先,將加密值用作“唯一ID”或“條件字段”不是一個好主意,因為它們將更改為相同的值。 這在加密方面非常普遍。 如果加密算法未更改同一條目的結果,則它不是一個好的加密方法。
其次,在處理加密和URL時,我遇到了同樣的問題,在我的情況下,我制定了自己的加密算法,只對URL使用有效字符。
實現加密並非難事:我使用了ASCII碼,一個簡單的密鑰,一個簡單的數學函數,僅此而已。 為了解密,我“逆轉”了數學函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.