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 ...
随机推荐
- New Roads CodeForces - 746G (树,构造)
大意:构造n结点树, 高度$i$的结点有$a_i$个, 且叶子有k个. 先确定主链, 然后贪心放其余节点. #include <iostream> #include <algorit ...
- php文件包含漏洞(利用phpinfo)复现
利用docker复现该漏洞,访问http://192.168.80.156:8080/phpinfo.php,可以看到页面出现phpinfo页面 再访问http://192.168.80.156:8 ...
- 5月17 利用AJAX查询数据库
利用AJAX查询数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- svn: 提交终止
今天我遇到了svn 的问题 svn: 提交终止: “/var/www/modelfinance/modules/incomereport/views/purchase” 处于冲突状态 冲突状态搞的我 ...
- acl使用示例
declare v_count number; uprinciple varchar2(20); principle varchar2(20); begin uprinciple := ...
- Python返回函数、闭包,匿名函数
函数不仅可以作为函数参数,还可以作为函数返回结果 def pro1(c,f): def pro2(): return f(c) return pro2 #调用pro1函数时,返回的是pro2函数对象& ...
- 反向代理/负载均衡/session/cookie
正向代理:客户端将流量重定向到burpsuite等软件或连接到VPN再访问服务器而不是直接访问服务器的场景.流量流动方向是真正机器--代理服务器.正向代理又称代理.普通代理. 反向代理:服务器端使用反 ...
- python+ajaxFileUpload 无刷新上传文件
需要准备文件 http://pan.baidu.com/s/1bp4N3nL qqi0 html <script src="{% static 'js/jquery.js' %}& ...
- LY.JAVA面向对象编程.封装、this、构造方法
2018-07-07 this关键字 构造方法 /* 我们一直在使用构造方法,但是,我们确没有定义构造方法,用的是哪里来的呢? 构造方法的注意事项: A:如果我们没有给出构造方法,系统将自动提供一个无 ...
- linux系统管理 系统进程
进程介绍 '进程' 进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源 ps命令基本使用 ps命令用来查看在计算机系统中那些程序正在执行,以及执行的 ...