日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python代码实现NIST随机性测试

發布時間:2024/3/12 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python代码实现NIST随机性测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近科研的需要,需要測試二進制序列的隨機性

找遍所有內網都沒有找到自己合適的代碼,網上很多都是講解自己怎么去下載和安裝sts-2.1.2的開發包,于是我也是一開始就入坑了,之前也是寫了一篇比較完整的工具包的下載和安裝的教程,點擊打開鏈接,但是如果你按照我的安裝步驟的話,成功安裝肯定是沒有問題的,但是你的使用就會出現各種各樣的問題:

比如我在使用的過程中遇到的問題有:首先,就是經常出現UNDERFLOW的情況,這種情況下,一般都是因為數據量不夠大的情況下造成的,所以如果你用過,你就會發現,想要測試15項的內容,大約你需要1GBit,這對于我們正常的情況下,是非常難的,根本達不到這個數據量,沒錯,肯定有的人會說,你可以不測試那么多的數據量啊 ,你可以測試部分的測試項啊,我也想啊,但是網上根本沒有發現怎么使用,單獨測試,而不是使用15項

我按照他的步驟,每次單獨測試的時候總是會出現下面的情況,(我不知道你們有沒有遇到)


看這個提示:如果你不想測試所有的項,請輸入0,否則輸入1.

然后我就輸入0


從這里開始,無論你輸入0還是1,都是沒有響應了。我一直也沒有找到任何解決的辦法,如果有人知道,請留言交流。


但是又因為迫于科研的壓力,還是要解決這個事情,這個是NIST的官方文檔

參考開發文檔,和國外大牛寫的代碼:整理并編寫python如下:

這里把15個測試項都單獨的編寫了一個可以運行的python代碼:

先看一下我的結果圖:有兩項不pass,13項success、


第一個是:

cumulative_sums_test import math #from scipy.special import gamma, gammainc, gammaincc from gamma_functions import * #import scipy.statsdef normcdf(n):return 0.5 * math.erfc(-n * math.sqrt(0.5))def p_value(n,z):sum_a = 0.0startk = int(math.floor((((float(-n)/z)+1.0)/4.0)))endk = int(math.floor((((float(n)/z)-1.0)/4.0)))for k in range(startk,endk+1):c = (((4.0*k)+1.0)*z)/math.sqrt(n)#d = scipy.stats.norm.cdf(c)d = normcdf(c)c = (((4.0*k)-1.0)*z)/math.sqrt(n)#e = scipy.stats.norm.cdf(c)e = normcdf(c)sum_a = sum_a + d - esum_b = 0.0startk = int(math.floor((((float(-n)/z)-3.0)/4.0)))endk = int(math.floor((((float(n)/z)-1.0)/4.0)))for k in range(startk,endk+1):c = (((4.0*k)+3.0)*z)/math.sqrt(n)#d = scipy.stats.norm.cdf(c)d = normcdf(c)c = (((4.0*k)+1.0)*z)/math.sqrt(n)#e = scipy.stats.norm.cdf(c)e = normcdf(c)sum_b = sum_b + d - e p = 1.0 - sum_a + sum_breturn pdef cumulative_sums_test(bits):n = len(bits)# Step 1x = list() # Convert to +1,-1for bit in bits:#if bit == 0:x.append((bit*2)-1)# Steps 2 and 3 Combined# Compute the partial sum and records the largest excursion.pos = 0forward_max = 0for e in x:pos = pos+eif abs(pos) > forward_max:forward_max = abs(pos)pos = 0backward_max = 0for e in reversed(x):pos = pos+eif abs(pos) > backward_max:backward_max = abs(pos)# Step 4p_forward = p_value(n, forward_max)p_backward = p_value(n,backward_max)success = ((p_forward >= 0.01) and (p_backward >= 0.01))plist = [p_forward, p_backward]if success:print ("PASS")else: print ("FAIL: Data not random")return (success, None, plist)bits=[1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0] if __name__ == "__main__":#bits = [1,1,0,0,1,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1,# 1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,#0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,1,#0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,#0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,0]success, _, plist = cumulative_sums_test(bits)print ("success =",success)print ("plist = ",plist) 第二個是:maurers_universal_test
import mathdef pattern2int(pattern):l = len(pattern)n = 0for bit in (pattern):n = (n << 1) + bitreturn n def maurers_universal_test(bits,patternlen=None, initblocks=None):n = len(bits)# Step 1. Choose the block sizeif patternlen != None:L = patternlen else: ns = [904960,2068480,4654080,10342400,22753280,49643520,107560960,231669760,496435200,1059061760]L = 6if n < 387840:print ("Error. Need at least 387840 bits. Got %d." % n)exit()for threshold in ns:if n >= threshold:L += 1 # Step 2 Split the data into Q and K blocksnblocks = int(math.floor(n/L))if initblocks != None:Q = initblockselse:Q = 10*(2**L)K = nblocks - Q# Step 3 Construct Tablensymbols = (2**L)T=[0 for x in range(nsymbols)] # zero out the tablefor i in range(Q): # Mark final position ofpattern = bits[i*L:(i+1)*L] # each patternidx = pattern2int(pattern)T[idx]=i+1 # +1 to number indexes 1..(2**L)+1# instead of 0..2**L# Step 4 Iteratesum = 0.0for i in range(Q,nblocks):pattern = bits[i*L:(i+1)*L]j = pattern2int(pattern)dist = i+1-T[j]T[j] = i+1sum = sum + math.log(dist,2)print (" sum =", sum)# Step 5 Compute the test statisticfn = sum/Kprint (" fn =",fn)# Step 6 Compute the P Value# Tables from https://static.aminer.org/pdf/PDF/000/120/333/# a_universal_statistical_test_for_random_bit_generators.pdfev_table = [0,0.73264948,1.5374383,2.40160681,3.31122472,4.25342659,5.2177052,6.1962507,7.1836656,8.1764248,9.1723243,10.170032,11.168765,12.168070,13.167693,14.167488,15.167379]var_table = [0,0.690,1.338,1.901,2.358,2.705,2.954,3.125,3.238,3.311,3.356,3.384,3.401,3.410,3.416,3.419,3.421]# sigma = math.sqrt(var_table[L])mag = abs((fn - ev_table[L])/((math.sqrt(var_table[L]))*math.sqrt(2)))P = math.erfc(mag)success = (P >= 0.01)return (success, P, None)if __name__ == "__main__":#bits = [0,1,0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1]bits=[1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,0,0] success, p, _ = maurers_universal_test(bits, patternlen=2, initblocks=4)print ("success =",success)print ("p = ",p)

這個好沒效率,15項的代碼太多了,等我把資源上傳到csdn吧,等審核通過,我再來附鏈接。

下載鏈接:點擊打開鏈接


總結

以上是生活随笔為你收集整理的Python代码实现NIST随机性测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩国产一区二区三区 | 手机成人在线 | 久草成人 | 日韩一级免费观看 | 夜色88v精品国产亚洲 | 丁香六月婷婷综合 | 国产精品久久久久影院老司 | 网站黄色在线观看 | 一本久久综合亚洲鲁鲁五月天 | 午夜在线精品 | 久久久不卡国产精品一区二区 | 精品视频一区二区三区 | 欧美日日夜夜 | 97精品人人妻人人 | 久久夜精| 国产精品日韩专区 | 老司机深夜视频 | mm131丰满少妇人体欣赏图 | 住在隔壁的她动漫免费观看全集下载 | 爱福利视频一区二区 | 久久动态图| 丝袜 亚洲 另类 欧美 重口 | 日韩视频久久 | 久久精品丝袜高跟鞋 | 日韩中文久久 | 青青色在线 | 看中国毛片 | 激情视频区 | 精品一区91 | 亚州精品国产精品乱码不99按摩 | 成人在线欧美 | 怡红院成永久免费人全部视频 | 亚洲日本色 | 能免费看av的网站 | 久久国产综合 | eeuss鲁片一区二区三区在线观看 | 欧美在线另类 | 成人毛片在线精品国产 | 亚洲国产精品自拍 | 国产调教视频 | 欧美日皮视频 | 免费av免费看 | 夜夜狠 | 奇米精品一区二区三区四区 | 人人爽爽爽 | 69精品视频 | 91黄色国产 | 国产一区二区三区麻豆 | xxxx久久| 久久看片| 中文字幕精品一区久久久久 | 成人四色 | 电影《两个尼姑》免费播放 | 久久久久久久久久久久97 | av免费播放| 人人草在线 | 久草视频在线资源站 | 大香蕉精品一区 | 91激情影院 | av无码精品一区二区三区 | 韩国伦理中文字幕 | 在线欧美激情 | 日韩一区精品 | 免费在线成人av | 欧美人体视频一区二区三区 | 久色网站| 欧美,日韩,国产在线 | 色综合综合网 | 天堂俺去俺来也www 欧美大片在线播放 | 日韩高清av| 婷婷色中文字幕 | 国产欧美一区二区三区免费看 | 91sex国产 | 神马午夜在线 | 国产大屁股喷水视频在线观看 | 久久久久久国产精品免费免费 | 五月婷婷啪啪 | 日韩一区欧美一区 | 涩涩屋视频在线观看 | 少妇精品无码一区二区免费视频 | 欧美肥老妇 | 中文字幕a级片 | 国模吧一区二区 | 欧美人与性动交a欧美精品 日韩免费高清视频 | 欧美一区精品 | 中文字幕观看视频 | 窝窝视频在线 | 800av在线视频| aa丁香综合激情 | 成人无码一区二区三区 | 日本一二三视频 | 亚洲国产一二 | 精品久久久网站 | 亚洲欧美一区二区三区孕妇 | 日韩色网站 | 色小妹av| 久久视频一区二区三区 | 秘密爱大尺度做爰呻吟 | 亚洲热在线视频 |