我寻找一种方式,特别是在 PHP中,我将保证永远得到一个唯一的键.

我做了以下工作:

strtolower(substr(crypt(time()),7));

但是我发现,有一段时间,我最终得到一个重复的键(很少,但通常足够).

我也想过这样做:

strtolower(substr(crypt(uniqid(rand(),true)),7));

但是根据PHP网站,如果uniqid()在同一微秒内调用两次,那么uniqid()可能会生成相同的密钥.我认为添加rand()它很少会,但仍然可能.

在上面提到的行之后,我也删除了诸如L和O之类的字符,所以对用户来说并不那么困惑.这可能是重复的原因的一部分,但仍然是必要的.

我想到的一个选择是创建一个将生成密钥的网站,将其存储在数据库中,确保它完全独一无二.

有其他的想法吗?有没有任何网站已经做到这一点有某种API或只是返回键.我发现http://userident.com,但我不知道键是否完全独特.

这需要在后台运行,无需任何用户输入.

只有3种方式可以生成唯一的值,而不是密码,用户ID等.

>使用有效的GUID生成器 – 这些长度不能缩小.如果你只使用部分你失败.
>从单个序列顺序生成数字的至少一部分.您可以添加绒毛或编码,使其看起来不那么顺序.它们的优势是开始很短 – 缺点是需要单一来源.单个源限制的工作是编号,所以你包含[source#] [seq#],然后每个源可以生成自己的序列.
>通过其他方法生成它们,然后根据以前生成的值的单个历史进行检查.

任何其他方法不保证.请记住,从根本上说,您正在生成一个二进制数(它是一台计算机),但是您可以将其编码为十六进制,十进制,Base64或单词列表.选择适合您使用的编码.通常对于用户输入的数据,您需要一些Base32(您暗示的)变体.

关于GUIDS的注意事项:他们从他们的长度和用于产生它们的方法中获得了唯一性的强度.任何小于128位都不安全.除了随机数生成之外,还有一些特性可以转化为GUID,使其更加独特.请记住,它们只是几乎是独一无二的,而不是完全独特的.这是可能的,虽然几乎不可能有一个副本.

更新了关于GUIDS的注意事项:自写入以来,我了解到许多GUID生成器使用加密安全的随机数生成器(很难或不可能预测生成的下一个数字,并且不太可能重复).实际上有5个不同的UUID algorithms.算法4是Microsoft当前用于Windows GUID生成API的算法4. AGUID是Microsoft实施的UUID标准.

更新:如果你想要7到16个字符,那么你需要使用方法2或3.

底线:坦白说,没有完全独特的东西.即使你使用顺序发生器,你最终会用完宇宙中的所有原子,从而循环回收自己,重复一遍.你唯一的希望就是到达这个时刻宇宙的热死亡.

即使最好的随机数生成器也可能重复等于您生成的随机数的总大小.以四分之一为例.它是一个完全随机的位发生器,其重复的几率是1/2.

所以这一切都归结于你的唯一性的门槛.您可以通过使用一个序列,然后base32编码,可以获得1,099,511,627,776个数字的8位数字的100%唯一性.不涉及检查过去数字列表的任何其他方法仅具有等于n / 1,776(其中n =生成的先前数字的数量)不为唯一的几率.

php – 唯一的密钥生成的更多相关文章

  1. Swift(iOS)和PHP中AES256加密的结果不同

    我在AES256工作,能够使用不安全的渠道在iOS和PHP之间加密/解密.我已经看到很多类似的问题围绕密钥大小,模式(CBC或ECB),随机iv的使用等等.但在这种情况下,我发现了一个奇怪的行为,如下所示.两种环境中的配置:–密钥:32字节(256位)–块大小:128位(标准)–iv:16字节(静态用于测试目的)–模式:CBC如果我加密16或32字节的文本(以匹配AES块大小),Swift和PHP

  2. PHP 加密 Password Hashing API基础知识点

    在本篇文章里小编给大家分享的是一篇关于PHP 加密 Password Hashing API基础知识点,有兴趣的朋友们可以学习下。

  3. 在PHP文件中存储加密密钥的安全性

    所以我使用mcrypt加密数据,将其存储在数据库中并对其进行解密.我想知道在public_html目录之外的PHP文件中存储加密密钥是否安全?将其存储在文件中的原因是它需要用于多个加密,以便多个用户可以解密某些数据,并且我认为将其存储在文件中比在数据库表中更安全,就在加密旁边数据.什么是潜在的安全风险?是否有可能让黑客获得对此文件的访问权限,从而获得密钥?

  4. php – Codeigniter:如何在将表单提交给控制器之前加密密码?

    我有一个简单的html登录表单当我提交表格并在控制器中这里的问题,它显示了普通密码,如果我在控制器中键入123456,我得到123456.>这是安全问题吗?>任何人都可以通过wireshark等网络监控工具获取密码吗?在发送到控制器之前,我可以在视图中加密密码吗?

  5. php – 加密/解密与MySQL数据库之间的密码

    我开始为我的网站创建一个用户系统,我想要做的是加密密码,而不是明文.我正在使用PHP/MysqL,所以我认为crypt()是一个很好的起点.但是,我对这样的密码学并不陌生,而且我很难理解它是如何工作的.有人知道如何在最简单的层面上实现密码存储为加密字符串的方式,但总是能够解密,没有安全问题?

  6. php – Zend Mail Gmail SMTP

    嗨,我正在尝试从Zend_Mail模块通过gmail发送一些电子邮件.这是我的代码:错误:警告:stream_socket_enable_crypto()[streams.crypto]:此流不支持206行/library/Zend/Mail/Protocol/Smtp.PHP中的SSL/加密无法通过TLS连接我试着告诉我的托管服务提供商在phi.ini中启用openssl.dll但他们说这不是必

  7. 你能将php crypt()的输出转换为有效的MD5吗?

    我有一些使用PHPfunctioncrypt()加密的字符串.输出看起来像这样:虽然我相信crypt()正在使用MD5算法,但输出不是有效的MD5哈希值.有没有办法将生成的哈希值转换为有效的MD5哈希值?更新:感谢回复到目前为止的答案.我很确定使用的crypt函数是使用某种MD5算法.我要做的是将我拥有的输出转换为MD5哈希,如下所示:有没有办法从我有的哈希转换成上面的哈希?

  8. php – 最好的方法来保护数据库连接字符串?

    我正在PHP中编写一组数据库驱动的应用程序.这些应用程序将作为自己的用户在Linux服务器上运行.其他用户有时可能会在系统上,但访问权限非常受控.其他服务器,他们根本无法访问.我还将向需要编写使用DBI和我写的一组函数访问数据库的Perl脚本的开发人员公开一个限制存储过程API.我的问题是什么最好的方式来保护配置文件中有连接字符串?

  9. php – 在nodejs中加密

    更新:varcode=Crypto.createHmac.update.digest;你想要使用createHmac函数.

  10. 用PHP和MySQL解析我的哈希

    )以及PHP手册中的其他内容,但不知道如何存储和检索密码.所以,这是我所了解的全部:之后,我失去了盐.检索密码没有盐很容易,但盐混淆了我.我从哪里获得$salt的价值,特别是如果它是独一无二的和安全的?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部