使用Laravel的内置加密工具解密随机错误

时间:2017-03-29 15:35:37

标签: laravel laravel-5 laravel-5.4 laravel-encryption

我通过邮件向使用加密电子邮件的用户发送邀请,以了解哪个用户回复了邀请。类似的东西:

  

您好,请点击此链接开始学习:https://example.org/start-learning?e=fwTreaN0WybffXdDfZZUNYB3FTFfZObCb7QFF5C4AFJvTjXabIPtRfcoXLkFYMUvD4FIZsmrDdEFN2OPKcTrAOSQLZfuKdfwcic1WtBxWSXWR1GEJD6we213A3BEPBpca0BxaaQ4GGMPFeRyXp6fPrG9WnTgWogwXUcnVtdwSEEdNHGuZsClTxR2AtD2JZN8VAEsRQKpFFShEDR2SET4KxGhLGM3M0FdDelrJtO8KXS2YRaddH==

加密电子邮件是上面的长字符串。我在Mailable类中编码这样的邮件:

$url = 'https://example.org/start-learning?e=' . encrypt($this->to[0]['address']);

然后在这样的邮件模板中添加$url

<a href="{{$url}}>click me<a>

然后,当用户点击链接时,它会路由到控制器,控制器会解密有效负载:

decrypt($request->input('e'));

然后,它适用于大约99%的人点击链接。但是大约百分之一,它不起作用,我有一个错误解密。而且我不知道为什么。这是加密和解密的Laravel应用程序。 是否有这种奇怪行为的原因?

旁注:我知道解密总是有效并且没有随机行为(顺便说一下,我在10000个条目上测试过它,它没关系)。

。邮件流程中必须有其他内容我不明白。

1 个答案:

答案 0 :(得分:1)

我认为在创建链接时应该使用urlencode()而不是:

$url = 'https://example.org/start-learning?e=' . encrypt($this->to[0]['address']);

你应该使用:

$url = 'https://example.org/start-learning?e=' . urlencode(encrypt($this->to[0]['address']));

确保它有效。