【问题标题】:Laravel "Hash::make" alternative for url parameters?Laravel“Hash :: make”替代url参数?
【发布时间】:2018-01-27 08:06:22
【问题描述】:

如何在 Laravel 中对 url 参数进行哈希处理? 我知道 Hash::make 方法,但这是一种密码方法(这些哈希对 url 不是很友好)。 Laravel 有没有更好的选择,所以我可以像 http://url?key=2jd8dka72 那样散列参数

【问题讨论】:

  • 您的示例网址也不是友好的网址?
  • 是的,这就是一个示例网址。但是 Laravel Hash::make() 哈希就像: %242y%2410%246nROENnpBmwDaxElOMs9402eQIEVBlJTMxjUO6726caxwbbvxNI6m
  • 另外,您的优先事项是什么。密码安全?最小的碰撞?速度?
  • 用例是什么?
  • 一个用例:一个用户可以用一个 url 向另一个用户发送邮件:url?send_mail_to_user=15&key=kah38sja(其中 'key' 是 15 的哈希值)。在 send_mail() 函数中,我可以验证密钥和 user_id。

标签: php laravel


【解决方案1】:

您可以为此使用 Laravel 加密功能。

use Illuminate\Support\Facades\Crypt; 在标题部分,然后使用Crypt::encrypt($param) 加密参数和Crypt::decrypt($param) 解密它。

【讨论】:

    【解决方案2】:

    只需添加base64 编码,使其看起来更友好。

    use Hash;
    ...
    $id = 15;
    $key = base64_encode(Hash::make($id));
    echo "http://someurl?send_mail_to_user=$id&key=$key";
    

    当你检查它时:

    use Hash;
    ...
    $keyDecoded = base64_decode($request->key);
    if(Hash::check($request->id, $keyDecoded)) {
       // checked
    }
    

    另一种方法是使用一些复杂的函数,比如另一个基数的大数。但它并不安全(只是通过默默无闻的安全):

    echo base_convert($id * 250 + 5675675, 10, 33); // converts 15 to 4q18q
    echo ((base_convert('4q18q', 33, 10) - 5675675) / 250); // converts back, but this one is not being used
    // checking:
    if(base_convert($request->id * 250 + 5675675, 10, 33) === $request->key) {
       // checked
    }
    

    【讨论】:

    • 是的,我知道。但我不明白为什么 Laravel 没有为此提供默认功能。其他 laravel 网站如何对 url 参数进行哈希处理?
    • 密码重置token是用str_random生成的,存储在实体的另一个字段中,所以作为友好字符串传递:reset password via link http://site.ru/password/reset/df06d70b6257690941b4130e5b293932cdb47061593aa0716e79987cad71bd78你只存储一个id,密码恢复存储两个字段:id 和 token。
    • Laravel 有加密类 Illuminate\Support\Facades\Crypt 来为我们做这一切。
    • 他需要传递一个友好的字符串然后检查它。我介绍了两种方法。它真的值得两次下跌吗?怎么了?
    • 没有严格定义使用加密。散列也适合他的目的。
    猜你喜欢
    • 2013-11-21
    • 2014-08-31
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多