加密生成指定长度_3分钟短文 | PHP伪随机Token生成器,实地测试,效果感人!

引言

我们经常可能会用到邀请码,邮件验证码,或者需要使用unique 字符串标记用户属性的情况。

93f75f3839967d66fd0bb21de9852b00.png

今天我们且不说高深的“全局唯一ID”的生成方案,我们说一个简单的,如何生成一个唯一的,随机的,数组字母组成的字符串。

学习时间

PHP 有一个内置函数 uniqid,用于生成一个唯一的ID。该函数结构形式:

string uniqid([ string $prefix = ""[, bool $more_entropy = false]] )

用于获取一个带前缀、基于当前时间微秒数的唯一ID。

但是该方法所生成的ID并不是安全的,且依赖于本机的时间戳,有可能在同一微秒生成同一ID。所以安全起见,需要添加上 prefix 参数,以示区别。

more_entropy 参数使生成的ID更具有唯一性,如果设置为 TRUEuniqid() 会在返回的字符串结尾增加额外的煽(使用combined linear congruential generator)。

这就够了吗?这当然不是最优的解决方法。我们尝试其他解决方案。使用 openssl 带来的加密性和唯一性。

bin2hex(openssl_random_pseudo_bytes($bytes))

使用 openssl_random_pseudo_bytes 函数生成一个伪随机字符串的字节,然后使用 bin2hex 将其格式化为十六进制的字符串。

生成的伪随机字节,其字节数由length参数确定。还指示是否使用了加密功能强的算法来生成伪随机字节,并通过可选的crypto_strongparameter来执行此操作。 此种方法返回的参数,很少情况下会出现false。

美中不足的是,这样生成的数字字符串,只在[0-9][a-z]之间,不够广泛。我们尝试加固这个生成方法,增强其鲁棒性。

70b4602f68cc1335fb36a12ece447298.png

上述函数会生成一个区间位于 [$min, $max] 的随机数字。然后调用该函数生成指定长度的字符串。

8d371c431aa336fdfb8cb501c74d0204.png

函数 crypto_rand_secure 函数的实现方法,在PHP标准函数中,可以使用 rand / mt_rand 函数替代。

在PHP 7 中,系统提供了更好的函数,可以替代 crypto_rand_secure 使用,就是 random_bytes 和 random_int。使用内置函数,我们将 getToken 函数改造如下:

4fca17961633ac7f86ddb6dabdb138e9.png

当然少不了的测试结果,我们批量生成一些 32 位长度的字符串。

0420292922e8cd7ffd279561d4610865.png

写在最后

本文深入探讨了生成随机数字,进而生成指定长度的字符串,实现函数并进行了测试。大家可以在机器环境进行测试。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java高级程序设计》期末作业【2】-进度安排

计算器项目计划进度安排: 项目成员:潘世林 何青 柴晓光 张峰转载于:https://www.cnblogs.com/panshilin/p/5578496.html

python find不区分大小写_牛鹭学院:Python基础了解

本文来自牛鹭学院学员:田雨python初印象Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。Python 是交互式语言: 在一个 Python 提示符 >>> 后直接执行代码。Python 是面向对象语言: 这意味着…

Spring+Quartz(一)

2019独角兽企业重金招聘Python工程师标准>>> Quartz是一个非常优秀的任务调度引擎,详情请见官网:http://www.quartz-scheduler.org/ 而Spring很好地集成了Quartz,为企业级的任务调度提供了方便。 下面先看一个实现了Job接口的任务HelloWorldJ…

linux sudo 版本,Linu下如何升级当前sudo版本

Sudo 的全称是“superuserdo”,它是Linux系统管理指令,允许用户在不需要切换环境的前提下以其它用户的权限运行应用程序或命令,通常是以 root 用户身份运行命令,以减少 root 用户的登录和管理时间,同时提高安全性。该漏…

LaTeX技巧205:使用split输入多行公式技巧

我们在输入多行公式的时候,split,array,multiline,align,aligned等等都是我们可以选用的环境,这里介绍split的使用方法。演示效果图:演示代码:\documentclass{article}\pagestyle{em…

linux纯内核直接用吗,Linux:为啥内核有的变量没有初始化就敢直接使用?

一、问题为啥内核有的变量没有初始化就敢直接使用?二、分析看上图,其中的5747行的变量nid的确没有定义,就直接使用了,这么做没有问题吗?其实大家仔细看一下,5765行是一个宏,到内核源码去找该宏的…

sdr 软件_【火腿专题】购买软件定义无线电(SDR)还是传统无线电台?追求欲望无止境...

软件定义无线电与传统无线电选择作者:Onno VK6FLAB有一段时间,我一直在解释软件无线电(SDR)的一些内部工作方式是如何运作的,以便深入了解原因和方法的细节。这种探索是在一个新世界的背景下进行的,在这个世界里,有无数…

linux文本运行层次,Linux基础知识之---文件系统层级结构

#Linux基础知识之---文件系统层级结构(Linux系统)[基础知识,文件系统,层级结构,FHS]一切皆文件: 在Linux中,无论是目录、配置、cpu、内存、键盘、鼠标、或者运行中的系统及内核、甚至临时缓存也都有对应的文件。“一切…

服务器搭建-Linux基础知识

服务器搭建还是需要一些Linux知识的,这节就聊点基础的。 文件权限操作 查看权限 Linux中每个文件对每个用户来说都有对应的权限,在任一路径中输入ll就可以查看这些信息: rootip-*** /usr/local # ll total 32K drwxr-xr-x 2 root root 4.0K J…

seo从入门到精通_从入门到精通,新人必看的3本书SEO书籍

SEO入门书本引荐:从入门到通晓,新人必看的3本书在这个网上学习泛滥的年代,很多人都习气在网络上找教程学习,无论上视频教程,学习论坛,或是网上课堂等等。但也有些人仍是更习气看书学习的,很多人…

Hession矩阵与牛顿迭代法

1、求解方程。 并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。 原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) f(x0)(x-x0)f(x0) 求解方程f…

抽象工厂模式_设计模式——抽象工厂模式

阅读目录使用频率:★★★★★一、什么是抽象工厂模式二、补充说明三、角色四、例子使用频率:★★★★★一、什么是抽象工厂模式就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位);例如:生产一台PC机,使用工…

windows(win7,win8,xp)hosts文件找不到原因分析及解决方法

2019独角兽企业重金招聘Python工程师标准>>> 一般情况hosts文件是保存在C:\windows\System32\Drivers\Etc 文件夹上,由于安装是win7系统,在这个路径上就能找到这个hosts文件。如果你在该路径下没有找到这个文件的话,一般是以下几种…

sql 显示百分比_轻松搞定数据分析之SQL——简单查询

每天早起或者睡前听一首温柔而美好的音乐,是一件很幸福的事情,无论你是否懂音乐,它都能带你发现生活中的隐藏的那些美好,今天我们先来一起欣赏Mindy Gledhill的单曲《California》California (网易云音乐),每次我听到这首歌&#…

SpringMVC 中设置日期字符串转换格式

2019独角兽企业重金招聘Python工程师标准>>> 在使用SpringMVC的项目中经常遇到 controller 参数中接收Date类型的数据,但是页面传过来的参数又是日期字符串,会出现转换异常。 由于项目需要支持两种日期格式所以从写了一个日期转换器。网友可以…

操作系统 非连续分配_操作系统中的连续和非连续内存分配

操作系统 非连续分配In this article, we will learn about the different types of memory management techniques and also the pros and cons of different memory management techniques. 在本文中,我们将学习不同类型的内存管理技术 ,以及不同内存管…

文件名重定向到txt中Linux,Linux上glob用于实现文件名的通配、IO重定向及管道

Linux中所谓的通配是指,显示以指定条件为条件的文件;即通配的含义是指搜寻以已知条件为前提的目标文件。常用文件通配符有:文件通配符含义例子*任意长度的任意字符如a*,搜寻所有以a为首的文件名的文件?任意的单一字符如a&#xff…

分形与数据结构第二篇

一、分形之 迭代实现分形 本次的图形都是在之前的画图工具中实现的。 首先,还是和原来一样建立一个JButton元素组件,然后加上监听方法;再在public void mouseClicked(MouseEvent e) {}方法中实现图形; else if (s.equals("图…

华为linux版笔记本安装win7,华为MateBook X Pro笔记本怎样安装win7系统

华为MateBook X Pro的制造工艺达到了业界顶级的水准,高达91%的屏占比真正达到了近似全面屏的观感,触感顺滑质感强烈的机身让人爱不释手。对于有意选购一台高端轻薄本产品的消费者来说,MateBook X Pro应该是你首选的对象之一。那么这款笔记本怎…

怎么使用小爱同学音响_智能音响购买指南!!!

小度音响pro100天使用感受,100天前我冲动消费购买了一个智能音响,还是对比了多个智能音响做好的决定。使用到现在显然这个冲动消费是非常划算的,这个智能音响完全提升了我的生活质量,我现在一下班就会让它播放音乐、睡觉前播放几段…