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 ...
随机推荐
- React文档(三)介绍JSX
我们先看看这个变量声明: const element = <h1>Hello, world!</h1>; 这个有趣的标签语法既不是字符串也不是HTML. 这种写法叫做JSX,这 ...
- json加密
有的时候我们为了传参数的URL比较安全,我们一般会用json加密的方法来使自己的URL安全. $a['order_sn'] = $orderNo;$data = json_encode( $a);$d ...
- logstash快速入门
转自 http://blog.csdn.net/wp500/article/details/41040213 原文地址:http://logstash.net/docs/1.4.2/tutorials ...
- GitHub学习四-查看版本库信息
首先,只有在本地init以及关联到远程版本库的本地版本库,才能查看版本库信息 1.查看版本库名字 如果忘了名字,直接运行git remote 2.git remote show <name> ...
- axios全局设置url公共请求头
需求由来:公司项目外链到别公司项目或者网页(通俗的说就是通过别的随意网页跳转至你项目网页),这时公司项目就要区分是从哪个公司或者哪个网页跳转过来的,从而进行不同的接口请求(公司所有接口都要带上请求头) ...
- js地址多选实现,居住地,户口,职业,行业多选1
开年来,公司就甩给我一个需求,其中一部分是对省市区地址多选,研究了一下午,发现一个已经写好的js可以使用, 遂研究改js的逻辑与代码,下面贴的是最初版本的js,仍有部分不符合需求,所以还有2.0版本的 ...
- spark使用正则表达式读入多个文件
String dir = "s3a://example/";String currentDir = dir + "{1[5-9],2[01]}/*.txt";J ...
- learning ddr seft-refresh mode summary
- OOP⑸
1.封装: 继承: extends java只支持单根继承!(一个类只能有一个直接的父类) 是代码重用的一种方式! 将子类共有的属性和方法提取到父类中去! Object:超类/基类==>java ...
- Java 从服务器下载文件到本地(页面、后台、配置都有)
先来看实现效果: 有一个链接如下: 点击链接下载文件: 第一种方法:Servlet实现 一.HTML页面部分: 1.HTML页面中的一个链接 <a id="downloadTempl ...