kbmMW随机数与强密码
kbmMW随机数生成器
为了使基于kbmMW开发的项目更安全,其又提供了随机数及强密码生成实现类,拿来即用,让人感觉真是站到巨人的肩膀上好干活!
随机数方面,kbmMW分别提供32及64位的随机数生成器。
32位随机数生成器:
- TkbmMWRandomDelphi
- TkbmMWRandomPCGUInt32
- TkbmMWRandomMersenneTwisterUInt32
64位随机数生成器:
- TkbmMWRandomSplitMix
- TkbmMWRandomXoroshiro128Plus
- TkbmMWRandomXoroshiro1024
- TkbmMWRandomMersenneTwisterUInt64
使用这些类,需要引用kbmMWRandom,然后建立对应的类实例,调用Random方法,基本同Delphi内置的用法一样。
var
r32:TkbmMWRandomPCGUInt32;
begin
r32:=TkbmMWRandomPCGUInt32.Create;
try
for j:= to do
begin
Memo1.Lines.Add(inttostr(r32.Random));
end;
finally
r32.Free;
end;
end;
这些类都是TkbmMWCustomRandom的子类,看一下TkbmMWCustomRandom的Public声明:
public
constructor Create; virtual;
destructor Destroy; override; class function Make:T; overload; virtual;
class function Make(const ARange:T):T; overload; virtual;
class function Make(const ARangeLow:T; const ARangeHigh:T):T; overload; virtual;
class function MakeFraction:double; virtual;
class function MakeDouble:double; overload; virtual;
class function MakeDouble(const ARangeLow:double; const ARangeHigh:double):double; overload; virtual; function Random:T; overload;
function Random(const ARange:T):T; overload;
function Random(const ARangeLow:T; const ARangeHigh:T):T; overload;
procedure Seed(const ASeed:T); function RandomFraction:double; virtual; abstract;
function RandomDouble:double; overload; virtual; abstract;
function RandomDouble(const ARangeLow:double; const ARangeHigh:double):double; overload; virtual; abstract; property Bits:integer read GetBits;
property ThreadSafe:boolean read FThreadSafe write FThreadSafe;
end;
可以看到,这些类支持线程安全,同时还可以生成浮点型随机数,生成指定范围的随机数,非常适用于实际项目。
对于这些不同的随机数生成器间存在的优劣,可以参考下面的资源:
http://xoroshiro.di.unimi.it/
http://www.pcg-random.org/
经过上面的了解,我们来个实际的案例,如何生成6位数的验证码?
分两步:
- 引用kbmMWRandom单元
- 做一个函数生成6位数验证码
//生成6位随机验证码
function GenValidCode: Integer;
begin
//这是Delphi内置写法
//Randomize;
//Result := RandomRange(100001, 999999);
//用kbmMW实现的随机数生成器取代Delphi内置写法
Result:=TkbmMWRandomPCGUInt32.Make(,);
end;
密码生成器
基于kbmMW随机数生成器,作者还进一步实现了强密码的生成,并且提供了两个密码生成器和一个基本框架,如果这两个不满足你,那基于这个框架可以开发自己的密码生成器。下面两个类是kbmMW内置的:
- TkbmMWMixerPasswordGen
- TkbmMWKoremutakePasswordGen
TkbmMWMixerPasswordGen,称之为混合密码生成器,支持设置生成密码的最小及最大的个数,标点符号的最小与最大个数,是否是大小写混合的密码及密码的最小长度。如生成这样的密码:9rn=FM1Q
TkbmMWKoremutakePasswordGen,Koremutake密码生成器生成随机64位值,并将该64位值转换为由两个和三个字符组成的字符串,形成可发送密码。如生成这样的密码:HYFEBRYGROFEDRABOVYNE
var
pg:TkbmMWMixerPasswordGen;
begin
pg:=TkbmMWMixerPasswordGen.Create;
try
//可选择设置数字,标点符号的长度及是否包含大小写字母。
//默认密码最少8个字符,
//包含1到4位数字,没有标点符号
//并使用大小写混合字符。
Memo1.Lines.Add(pg.Generate);
finally
pg.Free;
end;
end;
//生成密码:69vcRPhw
var
pg:TkbmMWKoremutakePasswordGen;
begin
pg:=TkbmMWKoremutakePasswordGen.Create;
try
Memo1.Lines.Add(pg.Generate);
finally
pg.Free;
end;
end;
//生成密码:GUMIPAVYGRYTIFOFYSI
最后,如果使用内置的密码生成器,别忘记引用单元:kbmMWPassword
kbmMW为我们在实际项目中可能遇到的需求都提供了具体实现,拿来用就好了,有了kbmMW,再也不用自己造轮子,怎一个爽字了得。
拥有了kbmMW,不仅仅拥有了跨平台的三层框架,同时还拥有了类似上面在实际项目中要遇到的需求实现。这如同娶了一个媳妇,还带N多个丫鬟。
kbmMW随机数与强密码的更多相关文章
- mysql root强密码的必要性max_allowed_packet被改成1024引起的风险
前两天运维反馈说,有些机器的max_allowed_packet隔两天就会被改成1024,导致客户端调用时出错,网上有说内存不够的,也有人工修改的. 运维小姑娘一口咬定肯定没有改过的,而且my.cnf ...
- 强密码和弱密码并没有什么区别?NIST密码安全标准更新:不再建议密码要求混合大写字母、字符和数字
作为一名认真负责的小编,每次注册账号设置密码的时候都是最痛苦的,太简单的怕被破解,太难的又记不住. 等你好不容易记住密码,三个月后IT同学过来拍拍你的肩膀,"你的密码到期了,记得改啊--&q ...
- [Swift]LeetCode420. 强密码检验器 | Strong Password Checker
A password is considered strong if below conditions are all met: It has at least 6 characters and at ...
- iOS - WWDC18 iOS 自动生成强密码和自动填充验证码/密码
本文将介绍WWDC18 Automatic Strong Passwords and Security Code Autofill和WWDC17 Introducing Password AutoFi ...
- Java实现 LeetCode 420 强密码检验器
420. 强密码检验器 一个强密码应满足以下所有条件: 由至少6个,至多20个字符组成. 至少包含一个小写字母,一个大写字母,和一个数字. 同一字符不能连续出现三次 (比如 "-aaa-&q ...
- python 实践项目 强密码检测
需求:写一个函数,它使用正则表达式,确保传入的口令字符串是强口令.强口令的定义是:长度不少于 8 个字符,同时包含大写和小写字符,至少有一位数字.你可能需要用多个正则表达式来测试该字符串,以保证它的强 ...
- mysql 5.6启用强密码
mysql的密码策略通过插件的方式进行检查,插件的名称是validate_password,可通过如下方式安装: mysql> INSTALL PLUGIN validate_password ...
- 最强密码 (百度之星复赛 T5)
题目大意: 给出一个字符串A,要求最短的字符串B,B不是A的子序列. 求最短长度 和 最短的字符串个数 |A|<=105. 题解: 1.比赛的时候没有想出来,时隔一个多月又看到了这道题,虽 ...
- linux(centos6.10)下去掉mysql的强密码验证
vim /etc/my.cnf shift + G 光标移到最下方: o 进入插入模式,同时换行: 添加一行语句: validate_password=OFF 保存退出. servi ...
随机推荐
- Financiers Game CodeForces - 737D (博弈论)
直接暴力区间DP的话是$O(n^3)$, 关键注意到每步走的距离差不超过1, 所以差最大是$O(\sqrt{n})$的, 所以实际上有用的状态是$O(n^2)$的, 可以通过.
- python迭代器概念与应用
结论 )可迭代对象包含迭代器.2)如果一个对象拥有__iter__方法,其是可迭代对象:如果一个对象拥有next方法,其是迭代器.3)生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__i ...
- CF-517C-思维/math
http://codeforces.com/contest/1072/problem/C 题目大意是给出两个数a,b ,找出若干个数p,使得 SUM{p}<=a ,找出若干个数q使得SUM{q} ...
- Echarts 简单报表系列一:柱状图
见代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- IDEA Activiti Designer插件---actiBPM汉字乱码问题
1.找到IDEA的安装目录 2.用编辑器打开,在文件末尾添加 -Dfile.encoding=UTF-8
- noip2013转圈游戏
题目描述 n个小伙伴(编号从 0到 n−1)围坐一圈玩游戏.按照顺时针方向给 n个位置编号,从0 到 n−1.最初,第 0号小伙伴在第 0号位置,第 1号小伙伴在第 1 号位置,……,依此类推. 游戏 ...
- 调整innodb redo log files数目和大小的具体方法和步骤
相较于Oracle的在线调整redo日志的数目和大小,mysql这点则有所欠缺,即使目前的mysql80版本,也不能对innodb redo日志的数目和大小进行在线调整,下面仅就mysql调整inno ...
- Angular4.x 引入第三方 JS
引入 Jquery 使用 angular-cli 新建 angular项目 1.安装 jquery npm install jquery --save 2..angular-cli.json 中引入 ...
- Mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法
转载自:http://blog.csdn.net/jie11447416/article/details/50887888 1.案例中的数据结构和数据如下 2.在没有解决的时候,是这样的 SELE ...
- sql根据年月日查询注册数或者和值
//公司需要我做一个根据每天用户注册数量生成一个折现图,sql如下,//亲测好用,只是如果某一天没有注册的话,就不会显示日期 SELECT DATE_FORMAT(f.registDate, '%Y- ...