首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel制作独特的16个字符散列

Laravel制作独特的16个字符散列
EN

Stack Overflow用户
提问于 2017-11-10 19:01:25
回答 3查看 5.3K关注 0票数 2

我想要做一个完全独特的散列,即16个字符长,为某些私人博客帖子建立一个公共链接。因此,它们可以在以下网址访问:

https://website.com/read/ASDFGHJ9827DYCO9

在Laravel中有一个助手函数

代码语言:javascript
复制
\Hash::make($request->password);

它做了一个这样的散列:

代码语言:javascript
复制
$2y$10$kouytAixb/Yp5gpH7QqL6et/P.fW.qElsGkMncVM.1/29waEqeqjy

麻烦的是,我想做一个散列,只使用字母和数字,有16个字符长,而且绝对是独一无二的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-10 19:15:03

此外,John Elmore的回答是正确的,另外,散列数字会使值易受彩虹表攻击的影响,因此我会在实际id之前添加一些"salt“,这很难猜测,这样彩虹表就没有用处,理想情况下,长度为20或更长:

代码语言:javascript
复制
md5(salt . $model->id)

HTH

票数 2
EN

Stack Overflow用户

发布于 2017-11-10 19:05:57

如果它不需要是安全的(也就是说,您不关心是否有人可以反转它以获得原始值),只需md5()它。这将返回一个16字符的十六进制字符串,该字符串分布合理。

代码语言:javascript
复制
md5($model->id);
票数 3
EN

Stack Overflow用户

发布于 2017-11-10 19:21:44

有两种选择。不是十六个字。

  1. 使用php hash函数生成随机数。echo hash('ripemd128', 'some random input'); // echo's hex represented 32byte of data
  2. 加密某些内容,例如页面的id。使用对称加密,key将是该数据的解锁。独特性不再重要了,它怎么可能不重要.

在php中解释,http://php.net/manual/en/function.openssl-encrypt.php

代码语言:javascript
复制
//$key should have been previously generated in a cryptographically safe way, like openssl_random_pseudo_bytes
$plaintext = "message to be encrypted";
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
    $ivlen = openssl_cipher_iv_length($cipher);
    $iv = openssl_random_pseudo_bytes($ivlen);
    $ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
    //store $cipher, $iv, and $tag for decryption later
    $original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
    echo $original_plaintext."\n";
}

您可以使用此方法查找密码列表,http://php.net/manual/en/function.openssl-get-cipher-methods.php

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47229506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档