php 密码字符串限制,关于php:密码安全随机字符串函数
目标:找到最安全的密码随机字符串生成器。使用字母、数字以及字符串中可能的特殊字符。
我一直在这里和其他地方阅读,但我仍然听到许多不同的答案/意见。了解最新安全和密码技术的人能在这里插话吗?
以下函数将用于生成8个字符的随机密码,并生成128个字符的随机令牌。
功能1:
/**
* Used for generating a random string.
*
* @param int $_Length The lengtyh of the random string.
* @return string The random string.
*/
function gfRandomString($_Length) {
$alphabet ="abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
$pass = array(); //remember to declare $pass as an array
$alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
for ($i = 0; $i < $_Length; $i++) {
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n];
}
return implode($pass); //turn the array into a string
}
功能2:
php.net文档说:加密强:如果传递到函数中,这将保存一个布尔值,该值确定所使用的算法是否"加密强",例如,对于gpg、密码等的使用是安全的;如果是,则为真;否则为假。
这是基于服务器的吗?如果我测试它一次,它就能够生成一个加密的强字符串,它总是能够吗?或者我需要每次检查并创建一个循环,直到它生成一个加密字符串。
/**
* Used for generating a random string.
*
* @param int $_Length The length of bits.
* @return string The random string.
*/
function gfSecureString($_Length) {
$Str = bin2hex(openssl_random_pseudo_bytes($_Length));
return $Str;
}
号
我欢迎任何提高密码强度的建议。
那个问题没有答案。
哈哈,这是我读到的主要问题之一。这个问题有很多人在争论,接受的答案使用rand()函数,很多人不同意。这个问题的关键是要实际看看哪个是安全的。真正的答案,而不仅仅是想法或观点。
你可能需要通读一下。(提示:random_int1)。或者等待赏金标记。是吗?勾选标记是最不有用的答案,但不会减少重复。我们不要每周用新问题进一步淡化这个话题。
这个问题与密码安全无关。亨斯,公认的答案是不安全的。我的问题的方向完全不同。
所以你的抱怨是,这只是复制品的标题不再适合?或者你坚持个人重新解释为什么你的两个例子中的rand和bin2hex都不是加密安全的?
我正在寻找一个加密安全的字符串生成函数,以我当前的函数为起点。您标记为"复制"的问题只要求使用随机生成器函数。这就是为什么他把不安全的功能作为答案,它做了他所要求的。现在,这个问题得到了回答,我的问题也结束了,我将无法得到关于生成密码安全字符串函数的真正答案。
天哪。别那么健忘。除了公认的答案,没有人强迫你忽略任何事情。许多人在那里为解释如何生成密码安全字符串做出了贡献。这不是你的问题吗?那么为什么仅仅因为第一个答案就选择忽略一切呢?你实际上不是在寻找答案,而是在你的问题上重复一个答案,对吗?
我读了每一个答案,因为这个问题不是关于安全的,没有一个投票一致的答案是真正的答案来创建一个密码安全的字符串,真令人惊讶。是的,问题标题不正确的事实使得它不会被真正了解这个问题的人回答。
事实上,你没有一个答案张贴在那里,你甚至没有建议一个作为我的问题的答案,告诉我,你可能不知道。你只想以错误的理由结束人们的问题,而不是做一个有建设性的人。但无论如何,你浪费了我足够的时间。谢谢您的大力投入,先生。
看看这个答案。
所以您希望在PHP中安全地生成随机字符串。问题中的两个函数都不能满足您的需要,但rand()解决方案是这两个函数中最糟糕的。rand()不安全,而bin2hex(openssl_random_pseudo_bytes())限制输出字符集。
此外,在极端条件或异国环境下,openssl_random_pseudo_bytes()可能不可靠。
据我所知,只有当RAND_pseudo_bytes()没有返回任何数据时,crypto_strong才会设置为false。如果在调用openssl时未对其进行种子设定,它将静默返回弱(可能是可预测的)伪随机字节。在PHP中,您无法确定它是否是随机的。今天如何生成安全随机字符串
如果您想要一个已经得到php 5.x大量审查的解决方案,请使用randomlib。
$factory = new RandomLib\Factory;
$generator = $factory->getMediumStrengthGenerator();
$randomPassword = $generator->generateString(20, $alphabet);
替代解决方案
如果您不想使用randomlib(即使纯粹是因为您希望有其他选项可用),当php 7出现时,您也可以使用random_int()。如果你不能等到那时,看看我们的随机兼容项目。
如果您碰巧使用了密码库libnadium,您可以生成这样的随机数:
/**
* Depends on the PECL extension libsodium
*
* @link https://stackoverflow.com/a/31498051/2224584
*
* @param int $length How long should the string be?
* @param string $alphabet Contains all of the allowed characters
*
* @return string
*/
function sodium_random_str($length, $alphabet = 'abcdefghijklmnopqrstuvwxyz')
{
$buf = '';
$alphabetSize = strlen($alphabet);
for ($i = 0; $i < $length; ++$i) {
$buf .= $alphabet[\Sodium
andombytes_uniform($alphabetSize)];
}
return $buf;
}
号
请参阅这个答案,例如使用random_int()的代码。如果将来需要的话,我宁愿不重复更新代码的工作。
openssl_random_pseudo_bytes有很大的机会成为一个加密安全的生成器,而rand当然不是。但是,它只返回二进制数据,您可以将其还原为十六进制。十六位小数不足以生成密码字符串。两个函数都不包含您似乎需要的特殊字符。
所以这两个代码片段都不符合您的目的。
是的,但是把它从bin2hex改成生成密码并不容易。首先,您需要更改它以在一个范围内创建一个值(而不会失去随机性),然后您必须使用它来安全地生成密码。
马顿:你对随机同胞有什么看法?:)
@Scottarciszewski似乎是一个编写良好的API(实际上是函数调用),它按照优先顺序从多个源中检索随机字节。目前,source forge处于离线状态,但我认为将一个未维护的库(具有用于生成IV的函数)视为主要源是很奇怪的。代码已经考虑过了,所以我肯定会在很大程度上相信它,但我觉得它太像创可贴了。然后,用PHP编写的prng可能太慢,可能还有其他安全问题。它本身并不能解决这个问题(没有范围数)。
SourceForge?我不知道你在看什么。
好的,那是Mcrypt图书馆。没看到那个功能,我再看一次。
哦,我只是重读你的评论,知道你现在的意思。github.com/paragonie/random_compat/blob/master/errata.md这可能有帮助:)
是的,有帮助。如果mcrypt对于随机函数是安全的,那么选择是有意义的。不过,我还没有看到对mcrypt代码的任何安全性审查,但是只审查所需的代码应该比较容易。
php 密码字符串限制,关于php:密码安全随机字符串函数相关推荐
- python随机生成字符串_Python 2.6中的随机字符串(可以吗?)
我一直在试图找到一种更像python的方法来生成python中的随机字符串,这种方法也可以伸缩.通常,我看到类似的东西''.join(random.choice(string.letters) for ...
- python随机生成英文字符串_如何用Python语言生成随机字符串 | 学步园
这是在Stackoverflow的关于 "用Python语言简洁地生成随机字符串" 的经典问答. 将此文翻译并分享下. 我想生成一个长度为N的字符串. 这个字符串应由数字和大写英文 ...
- random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串...
openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...
- c语言随机产生大小写字母,c# 产生随机字符串,包括大小写字母和数字
#region MyRegion //產生密碼 protected static string GetPwd() { return CreateRandomNum123(2) + CreateRand ...
- shell 生成指定范围随机数与随机字符串 .
shell 生成指定范围随机数与随机字符串 分类: shell 2014-04-22 22:17 20902人阅读 评 ...
- .net生成随机字符串
生成随机字符串的工具类: /// <summary>/// 随机字符串工具类/// </summary>public class RandomTools{/// <sum ...
- shell 生成指定范围随机数与随机字符串
shell 生成指定范围随机数与随机字符串 1.使用系统的 $RANDOM 变量 fdipzone@ubuntu:~$ echo $RANDOM 17617 $RANDOM 的范围是 [0, 3276 ...
- php7不支持random函数生成随机字符串
封装函数生成随机字符串: /** 生成随机字符串* @param int $length 生成随机字符串的长度* @param string $char 组成随机字符串的字符串* @return st ...
- python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...
#-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...
- Java黑皮书课后题第6章:**6.18(检测密码)一些网站对于密码具有一些规则。编写一个方法检测字符串是否是一个有效密码。编写一个程序,提示用户输入一个密码,如果符合规则,则显示…否则显示…
6.18(检测密码)一些网站对于密码具有一些规则.编写一个方法检测字符串是否是一个有效密码.编写一个程序,提示用户输入一个密码,如果符合规则,则显示-否则显示- 题目 题目描述 破题 代码 运行示例 ...
最新文章
- 一文读懂生成对抗网络GANs(附学习资源)
- SecureCRT中文绿色免安装版修改字体颜色
- SQL语言之同义词(Oracle)
- boost::mp11::mp_same相关用法的测试程序
- 单元测试之JUnit 5 参数化测试使用手册
- ios新手开发——toast提示和旋转图片加载框
- 一招搞定高等数学! | 今日最佳
- python软件设计数据分析统计服_Python 和 R 数据分析/挖掘工具互查
- 傅里叶变换的更多性质:相位展开、零相位窗等
- 三星Galaxy Z Fold3已开始量产:搭载骁龙888 Pro 售价或超2万
- thinkphp5 没有 $this->ajaxReturn
- [转载] 中华典故故事(孙刚)——33 人上一百形形色色
- 360加固签名验证_360加固助手签名工具怎么用
- 【干货】PS 如何快速抠图示例
- python读取word内容复制粘贴_如何复制word文档的内容?
- 无线测温产品在山西煤矸石制砖余热发电项目中的应用
- 第一行代码读书笔记(Chapter2 探究新语言,快速入门Kotlin编程)
- 你可能没注意的CSS单位 BY:色拉油啊油
- 滴水逆向学习总结第二期
- 最简单日柱推算法_乒乓球技术中的反手台内拧,如何练最简单?满场飞的乒乓球步法怎么练?反手拧拉两段练习法,一练就会 胖子说乒乓视频教学...
热门文章
- 论文阅读Check it again:Progressive Visual Question Answering via Visual Entailment
- 最佳阵容问题matlab,数学建模-最佳阵容问题.doc
- java开发的公文管理系统源代码_基于jsp的公文管理系统-JavaEE实现公文管理系统 - java项目源码...
- k8s源码分析 pdf_《k8s-1.13版本源码分析》上github
- 云计算笔记---day3
- 思考型人格分析,思考型人格的职业发展方向
- 计算机基本操作评课记录,《Word的基本操作》评课稿--李存业
- 一览各类无人飞机设计方法
- python+openCV使用SIFT算法实现印章的总相似度检测
- daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序.doc...