NIST数字测试套件使用说明

2023-11-02

NIST 测试套件是由15个测试组成的统计软件包,这些是为了测试随机(任意长度)由基于硬件或软件的密码随机或伪随机数生成器产生的二进制序列。测试关注于各种不同类型的已存在的非随机序列。有些测试可以分成各种子测试。

15个测试主要是(属于密码算法安全测试方法):

  1. 频率(单比特)测试
  2. 块内频数测试(Frequency Test within a Block)
  3. 动向(Run)测试
  4. 最大游程检测
  5. 二进制矩阵秩(Binary Matrix Rand)测试
  6. 频谱测试
  7. 非重叠字匹配测试
  8. 重叠字匹配测试
  9. Maurer通用统计检测

         10、线性复杂度测试

         11、系列(Serial)测试

         12、近似熵测试

         13、累积和测试

         14、随机游程(Random Excursions)测试

         15、随机游程变量(Random Excursions Variant)测试

这里没有依赖性(扩散与混乱)---完备性与雪崩效应测试、自相关测试和Lempel-Ziv压缩测试。

 

 

下载的软件sts-2.1.2压缩包中,解压后源文件中有上述的密码算法安全测试的源码,如下

若在windows下,由于该软件是基于linux环境开发的,里面的源文件由makefile控制,要想在windows下使用,则需要借助另一软件Cygwin。

Cygwin官网下载地址:http://www.cygwin.com/

安装使用该软件参考:http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin1.htm

上面有详细讲说,但对于这个随机数测试包需要注意的主要是一下几点:

1、下载安装的时候一定注意要把组件都勾上,特别是gcc一定要勾上,如果不知道怎么选,那就有gcc的地方全勾上吧。因为需要gcc这个编译器。
2、运行Cygwin,进入该软件包sts-2.1.1中包含makefile文件的文件夹,输入:make命令,该软件就在安装了,完后之后会发现多了一个文件(assess.exe),那个就是可执行文件了。有了它就安装成功了。

 

还可以参考一下链接:https://wenku.baidu.com/view/dc0ada02eff9aef8941e0644.html

 

由于本机本身装有虚拟机及ubuntu系统,所以直接在Linux操作系统下安装。步骤如下:

  1. 打开已经安装好的ubuntu系统,在管理员权限进入系统,把已经下好的数字测试套件包拷贝到Home目录下
  2. 对包进行解压缩,解压在该目录下。
  3. 进入到解压缩的该目录下(输入命令cd 文件名)
  4. 输入make进行编译makefile文件,得到assess文件(编译成功后该目录下会有assess文件)
  5. 在该目录下输入./assess <datalength>,datalength为测试的数据长度。

 

 

下面举例说明

 

  1. 进入软件界面后,有基本操作指示(生成器选项)

基本测试用matlab写一个随机数矩阵(x = randsrc(1,32e3,[0,1]);

)把数据复制到txt文本中,然后把随机数矩阵的文本array.txt复制到该目录下,

 

根据生成器提示选择0输入文件,输入array.txt,之后则是选择测试类型,即上面的15种测试类型。

 

或者测试全部,它有一个提示可以测试上述15种测试,即Enter Choice输入1

 

How many bitstreams? 输入流个数;这个流个数和第一步中的文件位长度存在这样关系:

位长度*bitstreamsnum=文件总位长度。一般随机数文件在32M以内(2G内存支持),bitstreamsnum默认输入1,第一步输入文件总bit长度。如果文件超过32M那么计算过 程中内从不足,因此需要第一步输入文件总长度的1/8、1/16...,然后在此处输入8、16,等价于把源文件划分为等长的几条流,来做随机性检查。

Bitstreams输入默认1后,下面会问输入文件的形式是ASCII类型的数据构成的序列(ASCII 中的0和1)还是8位的二进制数据。

最后完成后的结果在该目录下的experiments/AlgorithmTesting下的某种测试目录下

每种算法目录下都有stats.txt 文件中描述的是P-value值,在ALPHA = 0.0100条件下(默认值),貌似这个值大于0.01就表示差不多随机,越大越好。

 

注意:使用所有测试时,参数设置如下,但是可能数据长度并不适合某些测试,所以最后只有13种统计测试完成。

 

 

 

测试方法参看:https://wenku.baidu.com/view/020b8df47c1cfad6195fa7e0.html

伪随机性是密码算法安全性的重要指标,用于评估密码算法的伪随机性,其原理一般是假设检验,一般要求接收水平Pv>0.01

比如看动向(Run)测试结果不符合统计量标准PI=0.280969

单比特动向测试是检测算法f的输出在0和1之间摆动的次数,其测试方法如下:

测试数据文件,有几个示例在下面这个文件夹中

1M二进制比特位数据

这个地方输入表示的是15个测试中哪些测试是需要应用在该序列中,1表示应用,0表示不应用,这里就是表示重叠字匹配测试(Overlapping Template Matchings)

我们照着样例文件写数据,按照示例测试data.pi数据:

Data.pi数据中的二进制数我们可以先复制到test.txt文件中,再用matlab读取数据

clc;clear;

res = textread('test.txt','%s');

 

%res为待转换的cell

for n=1:length(res)

      x{n}=str2num(res{n});

end

for m=1:length(x)

      y(m)=x{m}(1);

end

% format longG

得到data.pi中的数据总共有1004932个二进制数

The file finalAnalysisReport.txt contains the results of these two forms of analysis.

这里在sts目录下的experiments/AlgorithmTesting的finalAnalysisReport.txt文件中可以看到所有测试的结果。注意这里data.pi输入数据是100000的值,那么./assess 100000就得写10万,不然会报数据不够的错误。

列C1-10代表相对应的p值的频率,列ProPortion代表二进制序列通过的比率。if 1000 binary sequences were tested (i.e., m= 1000), α= 0.01 (the significance level), and 996 binary sequences had P-values .01, then the proportion is 996/1000 = 0.9960.

二进制序列长度就改how many bitstreams的位置。(只是需要注意./assess 长度*bitstreams长度要小于原数据总的数据长度)

 

./assess 长度,这里的长度是一组的长度,所以要注意序列的位数一定要足够,不然测试会报数据不够的错误。

./assess 10000(数据长度改小测试一下),结果如下

上述结果是bitstreams=100时的结果,bitstreams是测试样例中有多少组数据,proportion表示比特流中的比率

nistspecialpublication800-22r1a说明文档中,91页写到一般建议和规范,告诉我们为什么数据集没有通过统计测试:

  1. An incorrectly programmed statistical test除了特殊情况,我们认为统计测试是为了解决某类特殊问题而量身定做的。但是部分统计测试受限于人工上限,比如随机偏移测试不能大于max{1000,n/128}次循环,依据实验条件,参数可能需要增加。
  2. An underdeveloped (immature) statistical test:很多统计测试都是以渐进近似为基础的
  3. An improper implementation of a random number generator:有可能由于硬件上设计的瑕疵或者编码实现错误导致硬件RNG或者软件RNG失败。
  4. Improperly written codes to harness test input data:一般测试数据在统计测试之前由RNG生成。比如,可能处理包括由RNG分割成合适大小的块的输出流,以及0转换成负数。
  5. Poor mathematical routines for computing P-values
  6. Incorrect choices for input parameters某些统计测试可能对输入参数较为敏感。比如序列长度10^6,块长度接近log2(n)是可以接受的。经验证据表明,在块长度m大于14时,观察到的检验统计量将开始与期望值不一致(特别是已知的数据生成器,如sha-1)。

通常需要考虑的参数有:序列长度,样本大小,块大小和模板(template)。

样本大小:The issue of sample size is tied to the choice of the significance level. NIST recommends that, for these tests, the user should fix the significance level to be at least 0.001, but no larger than 0.01.

If a sample of only 100 sequences is selected, it would be rare to observe a rejection.

Thus, the sample should be on the order of the inverse of the significance level (α-1). That is, for a level of 0.001, a sample should have at least 1000 sequences.

块大小:Block sizes are dependent on the individual statistical test. In the case of Maurer's Universal Statistical test, block sizes range from 1 to 16.

一般情况下,NIST建议选择的块大小不大于log2 nn是序列长度。

自己写个数据测试一下:

Matlab:

pop=round(rand(1000,25));

xlswrite('b',cellstr(reshape(sprintf(['''' repmat('%d',1,size(pop,2))],pop.'),[],size(pop,1))'))

         写到xls表格中,然后拷贝到txt文件中

         然后在ubuntu系统下按照上面的步骤测试该txt文本中的ASCII码表,最后测试完成后会出现错误:Segmentation fault (core dumped)

       Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。如最近的势能图代码中的链表操作,对链表的新增和释放包括赋值等等,如出现不当操作都有可能造成程序崩溃。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题的最好办法则是调试。

ulimit为shell内建指令,可用来控制shell执行程序的资源  -a显示目前资源限制的设定。

Stack size这里是8192kbytes最大上限2G

参  数:
   -a  显示目前资源限制的设定。 
   -c <core文件上限>  设定core文件的最大值,单位为区块。 
   -d <数据节区大小>  程序数据节区的最大值,单位为KB。 
   -f <文件大小>  shell所能建立的最大文件,单位为区块。 
   -H  设定资源的硬性限制,也就是管理员所设下的限制。 
   -m <内存大小>  指定可使用内存的上限,单位为KB。 
   -n <文件数目>  指定同一时间最多可开启的文件数。 
   -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 
   -s <堆叠大小>  指定堆叠的上限,单位为KB。 
   -S  设定资源的弹性限制。 
   -t <CPU时间>  指定CPU使用时间的上限,单位为秒。 
   -u <程序数目>  用户最多可开启的程序数目。 
   -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

可以参看https://blog.csdn.net/zqtsx/article/details/24383755这篇文章,利用gdb等命令查看进程。

这里出现Segmentation fault大概是因为数据格式不对。

 

Igamc:underflow错误,网上说是因为数据量太少。在bitstreams那输入1,即只有一个比特流数据,那么通常也没办法看到没有通过的序列(假设序列是随机生成的),即proportion=1/1,因为这一组数据要么通过测试要么没通过测试。Bitstreams输入1就不会报underflow错误,或者把数据弄长些。

Bitstreams输入1的话就不会报溢出异常或者段错误。

但是bitstreams为1时没办法得到正确的结果。

自己随机写了一个32*10的随机序列,./assess 32和bitstreams=10得到结果

对于每个统计测试除了随机变量测试外,最小通过率接近0.8,其实结果不准确,bitstreams为1也是不准确,也没办法得到p值,按照官方说明文档要求bitstreams应该在(100,1000)的范围内。

 

 

NIST测试软件里面有伪随机数生成器,

Linear Congruential Generator (LCG),参看帮助文档115

Quadratic Congruential Generator I (QCG-I)

Quadratic Congruential Generator II (QCG-II)

Cubic Congruential Generator II (CCG) ,参看帮助文档116

Exclusive OR Generator (XORG)

Modular Exponentiation Generator (MODEXPG)

Secure Hash Generator (G-SHA1) ,参看帮助文档117

Blum-Blum-Shub (BBSG)

Micali-Schnorr Generator (MSG) ,参看帮助文档118

例如第一个线性同余生成器是通过算法生成伪随机序列,关系式是

生成的伪随机数直接进入测试,操作如下,

这里15个测试只选择了Frequency测试,得到结果在LCG文件夹下看,15个子文件夹代表15种测试方法的结果,里面有两个子文件

假设bitstreams=120

Results.txt包含了120次的P值的结果

stats.txt包含了120次比特流的详细结果,报错参数以及是否通过该项测试结果

 

这里stats.txt是每次频率测试时的计算信息

./assess 数据长度 ,其中数据长度L=100000

特别注意:这里bitstreams*L必须小于等于文件中的数据长度,否则会报数据不够的错误。

The nth partial sum是100000个0和1序列转化为-1和1之后的和,如下面描述

拿第一组数据来检验,利用matlab的erf函数来检验

Sn=34;

n=100000;

Sobs=abs(Sn)/sqrt(n);

erfc=1-erf(Sobs/sqrt(2))

得到结果是0.9144与结果一致。

汇总的结果如下,在finalAnalysisReport.txt文件中

由上可知用自带的随机数生成的随机序列用来统计测试的结果和预想的是一致的,下面用自己写入的数据来进行测试看是否与设想完全一致。

这里面指示测试选0时虽然后面全部写000…但是仍然需要数据,如果数据不够就会报错。

下面看结果

16个p值如下,

部分详细状态

原数据如下,

按10分数据长度,总共16组数据,后面多的数据没有读了。

第一个1010110100,总和为0,按下面计算方式p值为1

第二个1011110000,总和仍为0

第三个0101001111,总和为2,按下面计算p值为0.5271和stats.txt的结果一致

Freq.txt文件记录着0和1出现的频数

最终分析结果文件如下,16组数据全部通过频率统计测试(P值>0.01)

说明文档解释C1-C10是代表p值的频率(其实不太明白)。Proportion是指16组数据中通过统计测试的比率。

 

注:这里只是完整的验证了频率测试,如果需要进行其他验证测试只需要修改下面这个位置,

特别注意:rank测试中是测试源序列中固定长度子链间的线性依赖关系,且子链必须是32*32的矩阵类型,eg./assess 1024

Random Excursions 和 Random Excursions Variant 测试要求输入的比特数最小是1,000,000bits。

必须满足其基本要求才不会报错:Test Not Applicable.There are an insufficient number of cycle.

比如动向测试编号是04,那么在

12345678911111

         012345

下面输入

000100000000000即可

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NIST数字测试套件使用说明 的相关文章

  • 如何检测手机当前为“桌面”(desktop)状态

    介绍 一些桌面软件会在用户把手机切换到桌面 desktop 时显示一些特定的信息 如图片 滚动文字等 达到一种个性桌面的效果 这里就介绍一种检测 桌面 的方法 S60 2nd的 桌面 是电话应用 S60 3rd的 桌面 是Idle exe
  • J2ME平台A-RPG游戏怪物寻路算法初探

    最近似乎在手机上A RPG游戏很受欢迎 当然 我最近也在帮公司写一款A RPG类的游戏 以前从没写过这样的游戏 从有到无的写出来了 也碰到不少问题 包括屏幕滚动时地图title数组索引的校验 整个游戏框架的搭建 地图数据的处理 分层的处理
  • web app和本地app之争 及其 iOS和Android之争

    2011年末的文章 当时还在学校 没有发表 今天贡献出来 今天和 1 我觉得你说其实是web app和本地app之争 我原来也看过别人讨论 我觉得这个看法好 如果以后多种平台并存 比如Ios Android wmphone bb 那么显然w
  • 中国互联网技术联盟推出“互联网+”资讯门户

    ITA1024中国互联网技术联盟7月正式推出专注 互联网 的资讯门户网站http abc ita1024 com 这也是国内首个专注于帮助中国企业有效落地 互联网 的服务平台 是为负责企业 互联网 转型战略的CEO CIO CFO CMO
  • 如何快速上手一个手机平台

    假如你以前在其它手机平台上开发过MMI APP 现在公司要更换手机平台 你如何能快速了解新的手机平台 首先 你要有一个该平台的运行环境 象MTK 展讯都提供一套完整的软件方案 经过简单的调试 该运行环境编译通过 其次 找出手机软件的运行入口
  • NIST数字测试套件使用说明

    NIST 测试套件是由15个测试组成的统计软件包 这些是为了测试随机 任意长度 由基于硬件或软件的密码随机或伪随机数生成器产生的二进制序列 测试关注于各种不同类型的已存在的非随机序列 有些测试可以分成各种子测试 15个测试主要是 属于密码算
  • C/C++的64位整型 zz

    为了和DSP兼容 TSint64和TUint64设置成TSint40和TUint40一样的数 结果VC中还是认为是32位的 显然不合适 typedef signed long int TSint64 typedef unsigned lon
  • Qualcomm Camera基础

    高通将android的camera模块重新修改了一下 与原生的方式存在一些差异 这里将前段时间学习的一些零散知识进行一下总结 便于以后查阅 1 整个模块主要巡行三个主线程 control config及frame control用来执行总的
  • android平台一些网页不能正常打开的问题

    最近发现在android平台一些网页怎么也打不开 尝试更改apn设置也无效 还发现这些网页在ubuntu系统下也是打不开的 最后经过查阅和尝试解决了这个问题 在此做下记录 在linux平台proc文件系统下存在一个文件即 proc sys
  • 云计算是被逼出来的

    author skate time 2010 05 26 云计算是被逼出来的 1 云计算是被逼出来的 云计算是被逼出来的 计算量越来越大 数据越来越多 越来越要动态 越来越要实时 越来越需要结构化 光有服务器 光有PC客户端已经不够了 所以
  • 中国猎头公司排名 (前十)

    4月3日 平时能够收到不少猎头公司排名评选的邀请 但自己一直怀疑这类排名评选的可行性和公信力 人为因素在这样的评选中占了太大的成分 因为喜欢搜索这个职业 所以我一直是一个谷歌Google的粉丝 Google的成功和深入人心和它坚持自己的 搜
  • 我的DirectShow著作

    DirectShow开发指南 清华大学出版社出版 2003年12月 本书以DirectX SDK 9 0版为蓝本 涉及的内容几乎涵盖了在Windows平台上使用DirectShow进行C 编码的方方面面 全书共分4个部分 第1部分详细介绍了
  • 做个成功的管理者

    什么是 管理 大家对这词都不陌生 但什么才是真正的管理呢 管理的真谛在 理 不在 管 管理者的主要职责就是建立一个合理的游戏规则 让每个员工按照游戏规则自我管理 游戏规则要兼顾公司的利益和个人的利益 并且把公司的利益和个人的利益统一起来 尽
  • 程序员MM一年的工作总结

    11月8号就是 工作 一周年纪念日了 是该对这过去的一年做个总结了 当初来这个公司因为它是第一个递橄榄枝给我的地方 为了尽量少的减少毕业和工作之间的空档时间 就接受了 我在这一年中改变很大 这样的改变是综合的 1 技术 这里所说的技术应该算
  • [机缘参悟-88]:什么是平台?国家、公司、家庭、硬件、软件、应用?

    目录 前言 1 什么是平台 1 1 英文是platform 1 2 百度百科 1 3 平台的现实案例 2 平台的特征 2 1 相对性 2 2 层次性 2 3 广泛性 第3章 三大系统 3 1 软硬件系统中的平台 3 2 人类社会的平台 3
  • Could not generate command line for the ‘VCCLCompilerTool’ tool

    转载自 http blog csdn net shirui1125 article details 6095774 gt ToolBox error PRJ0004 未能为 VCCLCompilerTool 工具生成命令行 从原有的平台复制
  • 关于在资源中的QML文件中访问本地Image文件(Qt的Bug)

    这里要讨论的内容是 将一个 QML 文件放置到 qrc 资源中后 需要访问本地目录的文件 比如图片的时候 遇到的一个在 Windows 和 Linux MeeGo 平台下表现不一致的 Bug 以及处理方法 事件起因 一个在资源文件中的 QM
  • 仓鼠与厕鼠

    author skate time 2010 05 28 仓鼠与厕鼠 昨天晚上坐车回家的路上 看见来来往往的人流与车流 行走在高楼之间的马路上 心里当时有个触动 把自己抛离这个画面 站在一个全局的角度看 看似简单的画面 却让人感触很深 行走
  • android应用程序版本管理

    一 版本的主要功能说明 在应用程序的升级 维护策略中 版本是一个关键的组成部分 主要体现在以下几个方面中 1 用户需要了解在他们的设备上所安装的应用程序的版本的特定信息 以及已安装程序的升级版本可用的情况 2 其他应用程序 作为同一个套件中
  • 各种平台下Perl模块的安装方法

    Perl到了第五版增加了模块的概念 用来提供面向对象编程的能力 这是Perl语言发展史上 的一个里程碑 此后 广大自由软件爱好者开发了大量功能强大 构思精巧的Perl模块 极大地 扩展了Perl语言的功能 CPAN Comprehensiv

随机推荐

  • java学习笔记(面试必备)

    1 java的四大特性 抽象 继承 封装 多态 抽象的概念 这里我先补充一下对象的概念 在java中世界万物皆对象 对象就是客观存在的事物 比如一个人 一支笔 而抽象就是将对象的某些细节和特征抽取出来 用程序代码表示 抽取出来的东西一般我们
  • 【计算机网络】因特网的组成

    从因特网的工作方式上看 可以划分为两大部分 1 边缘部分 由所有连接在因特网上的主机组成 这部分是用户直接使用的 用来进行通信 传送数据 音频或视频 和资源共享 2 核心部分 由大量网络和连接这些网络的路由器组成 这部分是为边缘部分提供服务
  • MySQL left join 和 left outer join 区别

    先说结论 left join 和 left outer join 的结果是一致的 我不知道各位大神是怎么测试的 网上面就说两个不一样 我A B表都是有重复数据的 为啥结果是一样的 表A 表B 左连接 SELECT ta tb Result
  • c++之 vector 容器

    1 vector存放内置数据类型 特点 是一种单端数组 可以动态扩展 动态扩展 不是在原有空间后边续接新的空间 而是寻找更大的内存 将原数据拷贝到新的空间 然后释放原空间 include
  • 利用git 将本地项目上传到github上

    利用git 将本地项目上传到github上 在github上创建仓库后 也链接了ssh 在本地项目的文件夹下git bash here然后 git init 项目初始化 git add 将项目加入本地暂存区 git commit m 项目注
  • Hive SQL语法报错 及相应解决方法

    Hive SQL语法与经常用的mysql语法具有一定差异性 按照写mysql的习惯写出的sql经常报错 且报错很难看出问题原因 因此在此记录出现问题的现象和解决方式 Error Error while compiling statement
  • String类中重写Object中的equals方法源码解析

    一 Object类中的equals方法 public boolean equals Object obj return this obj 由上面的代码可以看出 Object类中的equals方法比较的是地址 注意 对于引用类型比较的是地址
  • 如何使用webmagic发送post请求,并解析传回的JSON

    以浙江法院公开网的送达公告数据为例 http www zjsfgkw cn TrialProcess NoticeSDList 1 分析页面 看到参数有3个 分别是cbfy pageno和pagesize 传回来的数据是以json形式存在
  • 解决哈希(HASH)冲突的主要方法

    虽然我们不希望发生冲突 但实际上发生冲突的可能性仍是存在的 当关键字值域远大于哈希表的长度 而且事先并不知道关键字的具体取值时 冲突就难免会发 生 另外 当关键字的实际取值大于哈希表的长度时 而且表中已装满了记录 如果插入一个新记录 不仅发
  • vue router连续点击多次路由报错根本原因和解决方法

    原因 vue router 升级到 3 1 x 后 重复点击导航时 控制台出现报错 vue router v3 1 后 回调形式改成 promise api 了 返回的是 promise 如果没有捕获到错误 控制台始终会出现警告 解决方法
  • windows 11部署wsl环境

    部署WSL2环境 Ubuntu Centos有巨坑 建议不要安装 docker等使用会出问题 一 安装基础服务 首先需要先安装WSL WIN11直接打开powershell或者cmd输入 wsl install install 命令执行以下
  • AndroidStudio Grade 7.0 Maven搭建

    在组件化项目架构中每个组件管理我们一般使用分仓库管理 每个组件分别打包成aar包引入项目依赖 老版本 gradle 我们一般使用 maven 插件来上传aar包 而 Gradle 6 x 版本更新了上传插件为 maven publish 低
  • 仿二手车之家下拉列表

    效果展示 基础知识 认识 ViewDragHelper 类 和我们上次在这篇文章 仿QQ6 0主页面侧滑效果 第二种实现方法 中所讲的 GestureDetector 类一样 ViewDragHelper类也是系统给我们提供的 一种处理用户
  • PHP之伪协议

    前言 伪协议是什么 PHP伪协议事实上就是支持的协议与封装协议 ctf中的文件包含 文件读取的绕过 正则的绕过等等会需要用到 那伪协议有哪些 file data gopher php 等等 下面会讲 PHP伪协议 file 协议 本地文件传
  • 基于NodeJS的14款Web框架

    在几年的时间里 Node js逐渐发展成一个成熟的开发平台 吸引了许多开发者 有许多大型高流量网站都采用Node js进行开发 像PayPal 此外 开发人员还可以使用它来开发一些快速移动Web框架 下面就介绍14款基于Node js的We
  • 一些简单的C#语句的高级写法

    在C 的开发中 我们常常使用Debug Log来输出我们需要的信息 但是使用这个语句同时也会浪费一些内存 例如 我设计一个游戏角色的名称 血量 等级以及经验 string strName 游戏主角 int Hp 100 int Level
  • IC后端实现训练营实战项目案例 _ se

    IC后端实现训练营实战项目案例 setup violation高达50ns 文章右侧广告为官方硬广告 与吾爱IC社区无关 用户勿点 点击进去后出现任何损失与社区无关 一转眼一年就过去了 今年你过的还好吗 有没有遇到生命中的贵人呢 如果有 请
  • 好用的工具类或配置

    目录 通过数据库表快速生成controller service serviceimp mapper entity 编辑使用Swagger快速生成文档 通过MybatisPlus来简单实现分页查询 封装FastJsonRedisSeriali
  • redis知识点总结对比

    1 redis特性 1 是一个速度非常快的非关系型数据库 2 可以存储key与5种不同类型值的映射关系 3 可以将键值数据持久化到硬盘中 4 可以使用复制特性扩展读性能 5 可以使用分片来扩展写性能 2 redis和其他产品的对比 3 re
  • NIST数字测试套件使用说明

    NIST 测试套件是由15个测试组成的统计软件包 这些是为了测试随机 任意长度 由基于硬件或软件的密码随机或伪随机数生成器产生的二进制序列 测试关注于各种不同类型的已存在的非随机序列 有些测试可以分成各种子测试 15个测试主要是 属于密码算