限制Laravel 5加密长度

Jis*_*d P 5 php encryption laravel-5

我有一个Business Directory的Laravel5 Web应用程序.

当我加密像这样的值

$cryptval = Crypt::encrypt(1);

result  =  eyJpdiI6IndhaFZFNlhIRDlURzdXanJVMEhBM0E9PSIsInZhbHVlIjoidWF3VzRFZDhyRHltUlwveDdyV0VVWnc9PSIsIm1hYyI6IjE5YjA2YWIyN2Q0MTBlYjdhNDJiNDE5ZjY2OGQ2MDA2NzQ3ZTA4ODc4NzY0ZTIwMjBiMzQxN2RjNmM5ZDg3ZjYifQ==
Run Code Online (Sandbox Code Playgroud)

它给出了长约250长的弦.

有没有办法限制laravel中这个字符串的长度?

我的客户端需要在邮件功能中添加带加密值的URL.例如:www.example.com/varify/eyJpdiI6IndhaFZFNlhIRDlURzdXanJVMEhBM0E9PSIsInZhbHVlIjoidWF3VzRFZDhyRHltUlwveDdyV0VVWnc9PSIsIm1hYyI6IjE5YjA2YWIyN2Q0MTBlYjdhNDJiNDE5ZjY2OGQ2MDA2NzQ3ZTA4ODc4NzY0ZTIwMjBiMzQxN2RjNmM5ZDg3ZjYifQ==

但邮件功能只允许一些URL :(

Amo*_*Amo 1

一种解决方案是将散列值存储在表中,然后通过散列值的自增ID来引用散列。

| id | hash             | timestamp | random_key |
| 1  | some-hash        | 125346164 | 21415      |
| 2  | some-other-hash  | 123513515 | 25151      |
Run Code Online (Sandbox Code Playgroud)

所以现在,不要使用:

www.example.com/verify/some-hash
Run Code Online (Sandbox Code Playgroud)

您可以使用:

www.example.com/verify/1
Run Code Online (Sandbox Code Playgroud)

确实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
Run Code Online (Sandbox Code Playgroud)

话虽如此,我的建议是尝试解决电子邮件传送平台设置的限制,因为URL 可以支持大约 2000 个字符的地址长度。您给出的示例的长度仅为 32,完全符合任何现代浏览器可接受的长度。

编辑:只需使用这样的包生成一个 uuid,而不是尝试创建自己的随机 id。这将产生一个字符串,例如d3d29d70-1d25-11e3-8591-034165a3a613