簡體   English   中英

URL參數中的加密值(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM