2015-10-19 110 views
4

我有一個商業目錄的Laravel5 Web應用程序。限制Laravel 5加密長度

當我加密的值等

$cryptval = Crypt::encrypt(1); 

result = eyJpdiI6IndhaFZFNlhIRDlURzdXanJVMEhBM0E9PSIsInZhbHVlIjoidWF3VzRFZDhyRHltUlwveDdyV0VVWnc9PSIsIm1hYyI6IjE5YjA2YWIyN2Q0MTBlYjdhNDJiNDE5ZjY2OGQ2MDA2NzQ3ZTA4ODc4NzY0ZTIwMjBiMzQxN2RjNmM5ZDg3ZjYifQ== 

其賦予一個長字符串約250的長度。

有什麼辦法來限制laravel中這個字符串的長度嗎?

我的客戶端需要在郵件功能中添加帶有加密值的URL。 例如: www.example.com/varify/eyJpdiI6IndhaFZFNlhIRDlURzdXanJVMEhBM0E9PSIsInZhbHVlIjoidWF3VzRFZDhyRHltUlwveDdyV0VVWnc9PSIsIm1hYyI6IjE5YjA2YWIyN2Q0MTBlYjdhNDJiNDE5ZjY2OGQ2MDA2NzQ3ZTA4ODc4NzY0ZTIwMjBiMzQxN2RjNmM5ZDg3ZjYifQ==

但是郵件功能僅允許URL :(

+0

''''encrypt'''方法只接受''''value'''參數,所以沒有辦法明確控制哈希的長度。爲什麼你需要它更短? – Amo

+0

你需要加密嗎? – fico7489

+0

編輯問題 –

回答

2

一種解決方案是散列值存儲在一個表中的某些長度,然後引用散列由散列值的自動遞增的ID

| id | hash    | timestamp | random_key | 
| 1 | some-hash  | 125346164 | 21415  | 
| 2 | some-other-hash | 123513515 | 25151  | 

所以現在,而不是使用:

www.example.com/verify/some-hash 

您可以使用:

www.example.com/verify/1 

id應該被混淆,而不是使用只是作爲一個整數 - 這哪裏是時間戳和random_key可以提供幫助。

$id = 1; 
$timestamp = 125346164; 
$randomKey = 21415; 

$key = base64_encode($timestamp . $randomKey . $id); 

echo 'http://www.domain.com/verify/' . $key; 

// http://www.domain.com/verify/MTI1MzQ2MTY0MjE0MTUx 

之所以這麼說,我的建議是嘗試解決到位,通過電子郵件傳遞平臺URL's can support an address length of around 2000 characters限制。你給出的例子只有32的長度,並落在任何現代瀏覽器可接受的長度範圍內。

編輯:剛纔生成的使用包像一個this UUID,而不是試圖創建自己的隨機ID。這將產生一個字符串,如d3d29d70-1d25-11e3-8591-034165a3a613

+0

這會讓人很容易猜測,從而使散列冗餘。 –

+0

同意這個例子的格式不完美。它需要進一步模糊處理,這可以通過向'''id'''附加時間戳來完成。將更新示例。 – Amo

+0

Base64-將一個數字編碼爲混淆將會給像我這樣的程序員......我不知道。寫明文?每個人都知道base64編碼,由此產生的字符集和==可以在很大程度上讓它消失。 – sisve