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 ...
随机推荐
- python 发送邮件+多人+附件 最好用!!!
#!python3#codin=utf-8import yagmail yag = yagmail.SMTP(user='2679813@qq.com', password='mwlgdmwv4rss ...
- python记录_day01 初始
一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum),人称龟叔.目前python主要应用于web开发.云计算.科学计算.人工智能.系统运维.金融.图形GUI等 ...
- array_multisort以及php中的排序函数
1. array_multisort(array_column($arr, $key), SORT_DESC, $arr); // 根据二维数组中的某一列对数组进行增序或者降序排列 什么是关联数组呢? ...
- array_column的作用
从记录集中取出 last_name 列,用相应的 "id" 列作为键值: <?php // 表示由数据库返回的可能记录集的数组 $a = array( array( 'id' ...
- php导出大数据scv
1.我系统要导出30w的数据,刚开始我使用的是: ini_set('memory_limit', '1024M');set_time_limit(0); header("Content-ty ...
- zzw原创_根据某一文件复制出大量固定位数后缀名的递增的文件
1.trre.sh :根据某一文件复制出大量固定位数后后缀递增的文件. 如将 SPINFO_190516_20170109.001 复制成SPINFO_190516_20170109.002 ...
- .NET面试基本问题
1..NET和C#的区别? .NET:一般指的是.NET FrameWork框架,是平台,技术. C#:是一编程语言,是基本.NET平台. 2.C#的委托是什么?事件是不是委托? 委托可以把一个方法作 ...
- weblogic隐藏版本号教程(10.3.6为例)
隐藏版本号,如同大多数中间件都是取消Server头的发送:weblogic而言其默认就是不发送Server头的(即下边的“发送服务器标头”默认就是没钩选的). 写此教程的原因,一是以防Server头被 ...
- 回声UDP服务器端/客户端
UDP是具有数据边界的协议,传输中调用I/O函数的次数非常重要.输入函数的调用次数要和输出函数的调用次数完全一致,这样才能保证接受全部已发送的数据. TCP套接字中需注册待传输数据的目标IP和端口,而 ...
- gpu内存查看命令nvidia-smi
nvidia-smi nvidia-settings nvidia-xconfig