2012-03-21 48 views
1

是否有可能,轉換加密的字符串(類似於md5),而不會丟失將其解碼的能力?PHP:縮小加密值

0TJyj0wX4ZCrsYlANG8QgwBHnGzGU7kr1BEkolr6tY0OdowpA== 

Better: 73a4842f36b4n237m64as23 
+0

本質上,散列是一個方向。您正在尋找轉換(或潛在加密)。 – Corbin 2012-03-21 20:54:07

+0

Cryptception ...? – 2012-03-21 20:58:02

+0

@Corbin我編輯了我的帖子。謝謝。 – mate64 2012-03-21 20:59:31

回答

2

散列是隱窩,顧名思義,單向的。您將無法散列您的加密字符串,然後「解除散列」以再次獲取加密字符串。

可以,但是,試圖「再壓縮」被加密後的字符串:

  • 使用無損壓縮算法 - 儘管你可能無法獲得太多這種方法由於加密數據不壓縮好吧,並且對於某些輸入集壓縮can actually increase the storage requirements
  • 在加密之前壓縮數據。根據輸入的大小,單獨加密可以減小几個百分點(取決於算法),但通常不會超過5-10%(同樣,this answer指出這一點)
  • Re-該數據具有較高的「基地」編碼(即你的字符串是Base64編碼,您可以切換到Base85) - 但這只是導致在PHP來加密7% savings
+1

無損壓縮對於散列或加密數據也不會工作太好,數據看起來就像壓縮算法中的隨機數據。這比試圖壓縮JPEG或MP3文件更糟糕。 – 2012-03-21 22:03:54

+0

@owlstead:+1確實,我應該注意到在答案中......編輯時間! – 2012-03-22 14:52:43

+0

因爲msec沒有告訴他他需要它 - >他可以對它進行二進制編碼 – 2012-04-05 15:06:36

0

您可以使用RSA加密你的數據 看到this,它談論在PHP

+0

RSA加密肯定不會「縮小」它...... – 2012-03-21 22:01:28

0

最好的辦法是使用mcrypt擴展。 http://www.php.net/manual/en/book.mcrypt.php

encryptiondecryption的示例。

我也建議base64對加密結果進行編碼。

縮小對小數據(例如密碼)沒有意義。

+0

我不認爲通用的加密/解密樣本是有用的。如果你剛發佈最後一句話,我會+1。 – 2012-03-21 22:05:27