2010-08-05 64 views
2

我有一個ID數組(例如array(1, 2, 10, 34, 100, 101)),它代表數據庫中圖片的文件ID。尋找加密/解密函數

我想通過電子郵件發送給客戶的鏈接,當他按下此鏈接時,他會看到圖片,但我不希望客戶看到這些文件ID!

因此,我想用一些客戶不知道的密鑰來加密圖片ID數組,當客戶點擊鏈接時,我的PHP腳本將獲得加密的字符串,將其解密爲圖片ID併發送客戶與圖片的頁面。

是否有任何PHP內置函數可以使用自定義密鑰對我進行加密/解密?

謝謝!

+0

這是什麼意思?在某些時候,瀏覽器必須知道它正在顯示的圖像的URL。這是否僅僅是爲了阻止客戶端輸入其他隨機ID到一個URL來查看其他圖片? – 2010-08-05 03:46:13

+0

是的,我不想讓顧客看到其他照片。任何想法如何防止這一點? – 2010-08-05 03:49:07

+1

您的問題超出了模糊ID,您需要一個適當的權限系統,實際檢查是否允許某人查看某些內容。您可以通過將這些文件放在不可公開訪問的地方並通過腳本來提供這些文件,該腳本會檢查權限。 – deceze 2010-08-05 03:53:07

回答

1

PHP的mcrypt擴展名。它可以做到這一點。

請注意,在您描述的方法中,當您向他發送頁面時,客戶將看到圖片ID。

+0

你說得對。我沒有想到這一點。你有什麼想法如何不暴露圖片id? – 2010-08-05 03:49:49

+0

@Misha Moroshko:你可以有第二個PHP腳本,它返回適當的圖片數據,給定加密形式。爲用戶提供一個帶有指向第二個腳本的嵌入圖像的頁面。然後這些ID永遠不會被看到。 – Borealid 2010-08-05 04:07:56

1

如果是我實現這個我只是給客戶一個隨機哈希值,則涉及散列爲特定的ID在數據庫表有點像:每link_hash

link_hash VARCHAR(40) NOT NULL, 
link_id INT(11) NOT NULL 

(一個或多個行以允許多個ID)

正如Borealid在他的回答中所述,您還需要確保在他們查看頁面時,他們也不會在圖片網址中看到ID。這將是一個單獨的挑戰。

+0

OP的方法具有需要不斷存儲空間的優點;你需要O(N)存儲N =照片數量。 – Borealid 2010-08-05 03:44:10

+0

「正如Borealid在他的回答中提到的那樣,您還需要確保他們在查看頁面時不會在圖片網址中看到ID,這將是一個單獨的挑戰。」 - >以及可以通過解決 niggles 2010-08-05 04:18:16

+1

是的,但那麼'uid'散列就像圖片ID一樣好,所以OP可能會想要防止人們看到/分享的身份也是如此。 – thomasrutter 2010-08-05 04:24:34

2

如何給數據庫中的圖片名稱與ID不同?

當用戶上傳文件時,您爲該文件指定一個隨機名稱,例如當前時間戳和md5。您將名稱存儲在數據庫中,併爲其指定一個ID。這樣你就可以獲得順序ID,並且你可以獲得很難猜測的文件名。 這並防止訪問者顯示圖像文件夾的內容,並且你很漂亮。

+0

這是正確的想法 - 但不要打擾時間戳或哈希,只生成一個隨機的128位數字,並使用它的十六進制表示。猜測一個正確的數字的機會是無限的 - 相當於猜測一個正確的加密密鑰。 – caf 2010-08-06 03:08:16