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 :(
一种解决方案是将散列值存储在表中,然后通过散列值的自增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。