專利名稱:一種基于單幅圖像的真隨機(jī)數(shù)序列生成方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,涉及一種基于單幅圖像的真隨機(jī)數(shù)序列生成方法。
背景技術(shù):
真隨機(jī)數(shù)產(chǎn)生器建立在一種稱為熵源的不確定性源的基礎(chǔ)上,如熱力學(xué)噪聲、空氣噪聲、核衰變等現(xiàn)象,基于這些源來產(chǎn)生真隨機(jī)數(shù)一般都需要額外的電路或設(shè)備。從成本和便利性等方面來看,這種硬件真隨機(jī)數(shù)產(chǎn)生器的應(yīng)用場合受到限制。基于此,人們提出了基于數(shù)字圖像來產(chǎn)生真隨機(jī)數(shù)的方法,這種軟件真隨機(jī)數(shù)生成器不但廉價(jià),而且由于數(shù)字圖像幾乎隨處可得,使用非常方便。但是,單幅圖像所能產(chǎn)生的真隨機(jī)數(shù)長度有限,當(dāng)需要較長或者較多的真隨機(jī)數(shù)時(shí),要輸入多幅圖像才能滿足應(yīng)用要求,且耗時(shí)較長,在時(shí)效要求比較嚴(yán)格的場合應(yīng)用受到限制。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)中的缺陷,提供一種基于單幅圖像的真隨機(jī)數(shù)序列生成方法。
其技術(shù)方案為:一種基于單幅圖像的真隨機(jī)數(shù)序列生成方法,首先取得一幅數(shù)字圖像,對其進(jìn)行前處理操作,包括進(jìn)行格式轉(zhuǎn)換和裁剪等操作,得到符合尺寸要求的位圖(BMP)格式圖像,將此圖像作為初始熵源圖像;初始熵源圖像經(jīng)過后處理轉(zhuǎn)換、二維到一維(2D-1D)轉(zhuǎn)換生成一組真隨機(jī)數(shù)序列作為輸出;同時(shí),生成的該組真隨機(jī)數(shù)序列作為反饋,用于對初始熵源圖像進(jìn)行置亂變換處理,生成一幅變換后的新熵源圖像,同樣經(jīng)過后處理轉(zhuǎn)換、2D-1D轉(zhuǎn)換生成下一組真隨機(jī)數(shù)序列。依此類推,將每一輪產(chǎn)生的真隨機(jī)數(shù)序列合并,即可得到所需長度的真隨機(jī)數(shù)序列;或?qū)⒚恳惠喩傻恼骐S機(jī)數(shù)序列依次存入緩存中,由應(yīng)用程序按所需長度進(jìn)行取用。由于對初始熵源圖像進(jìn)行置亂變換處理所用的一個(gè)參數(shù)是上一個(gè)循環(huán)中生成的“01”隨機(jī)數(shù)序列,因此變換后產(chǎn)生的圖像依然具有隨機(jī)性。本發(fā)明所述方法構(gòu)成一個(gè)反饋系統(tǒng):后續(xù)熵源圖像通過系統(tǒng)生成的真隨機(jī)數(shù)序列對初始熵源圖像進(jìn)行變換得到,上一輪生成的真隨機(jī)數(shù)序列作為新熵源圖像產(chǎn)生過程的一個(gè)輸入?yún)?shù),可保證熵源的不確定性。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果:1、本發(fā)明所述方法選用常見的數(shù)字圖像作為系統(tǒng)的輸入,節(jié)約成本,使用方便。2、本發(fā)明的技術(shù)方案在產(chǎn)生較長的真隨機(jī)數(shù)序列時(shí),不需要用戶選取大量的圖像,節(jié)省大量人力和時(shí)間。3、本發(fā)明所述方法中,真隨機(jī)數(shù)序列的生成及保存與應(yīng)用程序取用隨機(jī)數(shù)的操作分離進(jìn)行,系統(tǒng)在后臺持續(xù)運(yùn)行,源源不斷地提供真隨機(jī)數(shù)序列,應(yīng)用程序可按需進(jìn)行取用。方便且易于管理。4、本發(fā)明構(gòu)成一個(gè)反饋系統(tǒng):后續(xù)熵源圖像通過系統(tǒng)產(chǎn)生的真隨機(jī)數(shù)序列對初始熵源圖像進(jìn)行變換得到,保證了熵源的不確定性。
圖1為本發(fā)明真隨機(jī)數(shù)生成方法流程示意圖;圖2為BMP圖像尺寸裁剪流程圖;圖3為2D-1D轉(zhuǎn)換操作流程圖;圖4為初始熵源圖像變換處理生成后續(xù)新熵源圖像的操作流程圖;圖5為對應(yīng)動態(tài)鏈接庫的內(nèi)部結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面結(jié)合附圖具體實(shí)施例來詳細(xì)描述本發(fā)明的技術(shù)方案。參照圖1,一種基于單幅圖像的真隨機(jī)數(shù)序列生成方法,首先獲取一幅數(shù)字圖像,對其進(jìn)行前處理操作,包 括進(jìn)行格式轉(zhuǎn)換和裁剪等操作,得到符合尺寸要求的位圖(BMP)格式圖像,將此圖像作為初始熵源圖像;初始熵源圖像經(jīng)過后處理轉(zhuǎn)換、二維到一維(2D-1D)轉(zhuǎn)換生成一組真隨機(jī)數(shù)序列作為輸出;同時(shí),生成的該組真隨機(jī)數(shù)序列作為反饋,用于對初始熵源圖像進(jìn)行置亂變換處理,生成一幅變換后的新熵源圖像,同樣經(jīng)過后處理轉(zhuǎn)換、2D-1D轉(zhuǎn)換生成下一組真隨機(jī)數(shù)序列。依此類推,將每一輪產(chǎn)生的真隨機(jī)數(shù)序列合并,即可得到所需長度的真隨機(jī)數(shù)序列。圖2為BMP圖像尺寸裁剪流程圖,對BMP位圖進(jìn)行裁剪操作,裁剪邊長選取標(biāo)準(zhǔn)為:假設(shè)待裁剪圖像大小為MXN,令m等于M、N中較小的值,選取n值,使得式2n彡m < 2n+1成立,則m=2n即為裁剪邊長。對于MXN大小的BMP圖像,判斷M、N值的大小,如果M>N,則令m=N,否則令m=M ;設(shè)i=l,判斷2~i < m&&2' (i+1) >m是否成立,不成立,則令i++,繼續(xù)判斷;如果成立,則以m=2~i為邊長裁剪原圖像,得到尺寸為mXm大小的符合要求的初始熵源圖像。在得到熵源圖像后,需要對其進(jìn)行后處理轉(zhuǎn)換。此操作的目的是對熵源圖像做置亂變換,使像素矩陣變得雜亂無章,更具有隨機(jī)性。此處可選用各種可以產(chǎn)生圖像置亂效果的算法,如Arnold圖像置亂算法,圖像加密置亂算法等。圖3:為2D-1D轉(zhuǎn)換操作流程圖。圖像經(jīng)過后處理轉(zhuǎn)換后,得到一幅置亂后的數(shù)字圖像。將所得圖像的mXm的像素矩陣分割成MXM個(gè)相等的塊,每個(gè)塊中包含(m/M) X (m/M)個(gè)像素點(diǎn),統(tǒng)計(jì)每一個(gè)塊中像素值為奇數(shù)的像素點(diǎn)個(gè)數(shù),如果為奇數(shù),則對應(yīng)的真隨機(jī)數(shù)序列位為I,如果是偶數(shù),則對應(yīng)的真隨機(jī)數(shù)序列位為0,統(tǒng)計(jì)完成之后即可得到一個(gè)MXM長度的“01”隨機(jī)數(shù)序列。如圖4中初始熵源圖像為圖2中得到的符合要求的初始熵源圖像,“01”隨機(jī)數(shù)序列為上一輪產(chǎn)生的真隨機(jī)數(shù)序列(在對初始圖像進(jìn)行初次變換處理時(shí),由于沒有來自之前產(chǎn)生的隨機(jī)數(shù)序列,可以將所需的隨機(jī)數(shù)序列設(shè)為全0 ),應(yīng)用上一輪中生成的真隨機(jī)數(shù)序列對初始圖像像素點(diǎn)進(jìn)行局部移位,真隨機(jī)數(shù)序列中每L位(L > 5)為I組,前3位指定當(dāng)前鼠標(biāo)點(diǎn)要進(jìn)行偏移的方向,3位有8種情況,分別對應(yīng)上丨,下丨,左一,右一,左上\,左下/,右上/,右下\ 8個(gè)方向,后(L-3)位指定鼠標(biāo)點(diǎn)要進(jìn)行偏移的位移(斜方向取近似值),循環(huán)調(diào)用真隨機(jī)數(shù)序列對所有的像素點(diǎn)進(jìn)行此種操作,可以得到變換后的新熵源圖像。圖5是對對應(yīng)的動態(tài)鏈接庫內(nèi)部結(jié)構(gòu)的簡單描述:動態(tài)鏈接庫包含2個(gè)對外接口函數(shù),分別是 TRNG_Thread (string path_image)和 Get_RandNum(int length, char*rand_buf)。TRNG_Thread(string path_image)的功能是產(chǎn)生真隨機(jī)數(shù)序列,通過參數(shù)path_image將數(shù)字圖像的路徑傳入系統(tǒng),如果路徑不正確,或圖像不能被系統(tǒng)識別,則函數(shù)返回false ;否則進(jìn)入生成真隨機(jī)數(shù)序列的操作,將產(chǎn)生的真隨機(jī)數(shù)依次存入緩沖區(qū)中,如果緩沖區(qū)滿則對其進(jìn)行循環(huán)覆蓋。Get_RandNum(int length, char*rand_buf)的功能是從緩沖區(qū)中獲取真隨機(jī)數(shù)序列,參數(shù)length為所需真隨機(jī)數(shù)序列的長度,參數(shù)rand_buf為用來存放取出的真隨機(jī)數(shù)序列的緩沖區(qū)。另外設(shè)置2個(gè)指針變量,用來保存當(dāng)前緩沖區(qū)中正在寫入和正在讀出的指針位置,I個(gè)長度變量,用來記錄當(dāng)前緩沖區(qū)中真隨機(jī)數(shù)序列的長度。如果調(diào)用函數(shù)Get_RandNum(int length, char*rand_buf)時(shí),緩沖區(qū)中真隨機(jī)數(shù)序列的長度小于length,則返回false,推遲某一時(shí)間后再重新執(zhí)行。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,本發(fā)明的保護(hù)范圍不限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明披露的技術(shù)范圍內(nèi),可顯而易見地得到的技術(shù)方案的簡單變化或等效替換均落入本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種基于單幅圖像的真隨機(jī)數(shù)序列生成方法,其特征在于,首先取得一幅數(shù)字圖像,對其進(jìn)行前處理操作,包括進(jìn)行格式轉(zhuǎn)換和裁剪等操作,得到符合尺寸要求的位圖BMP格式圖像,將此圖像作為初始熵源圖像;初始熵源圖像經(jīng)過后處理轉(zhuǎn)換、二維到一維轉(zhuǎn)換生成一組真隨機(jī)數(shù)序列作為輸出;同時(shí),生成的該組真隨機(jī)數(shù)序列作為反饋,用于對初始熵源圖像進(jìn)行置亂變換處理,生成一幅變換后的新熵源圖像,同樣經(jīng)過后處理轉(zhuǎn)換、二維到一維轉(zhuǎn)換生成下一組真隨機(jī)數(shù)序列,依此類推,將每一輪產(chǎn)生的真隨機(jī)數(shù)序列合并,即可得到所需長度的真隨機(jī)數(shù)序列;或?qū)⒚恳惠喩傻恼骐S機(jī)數(shù)序列依次存入緩存中,由應(yīng)用程序按所需長度進(jìn)行取用。
2.根據(jù)權(quán)利要求1所述的基于單幅圖像的真隨機(jī)數(shù)序列生成方法,其特征在于,所述方法構(gòu)成一個(gè)反饋系統(tǒng):后續(xù)熵源圖像通過系統(tǒng)生成的真隨機(jī)數(shù)序列對初始熵源圖像進(jìn)行變換得到,上一輪生成的真隨機(jī)數(shù)序列作為新熵源圖像產(chǎn)生過程的一個(gè)輸入?yún)?shù)。
全文摘要
本發(fā)明公開了一種基于單幅圖像的真隨機(jī)數(shù)序列生成方法,首先取得一幅數(shù)字圖像,對其進(jìn)行前處理操作,包括進(jìn)行格式轉(zhuǎn)換和裁剪等操作,得到符合尺寸要求的位圖BMP格式圖像,將此圖像作為初始熵源圖像;初始熵源圖像經(jīng)過后處理轉(zhuǎn)換、二維到一維轉(zhuǎn)換生成一組真隨機(jī)數(shù)序列作為輸出;同時(shí),生成的該組真隨機(jī)數(shù)序列作為反饋,用于對初始熵源圖像進(jìn)行置亂變換處理,生成一幅變換后的新熵源圖像,同樣經(jīng)過后處理轉(zhuǎn)換、二維到一維轉(zhuǎn)換生成下一組真隨機(jī)數(shù)序列,依此類推,將每一輪產(chǎn)生的真隨機(jī)數(shù)序列合并,即可得到所需長度的真隨機(jī)數(shù)序列;或?qū)⒚恳惠喩傻恼骐S機(jī)數(shù)序列依次存入緩存中,由應(yīng)用程序按所需長度進(jìn)行取用。
文檔編號G06F7/58GK103092567SQ20131001511
公開日2013年5月8日 申請日期2013年1月16日 優(yōu)先權(quán)日2013年1月16日
發(fā)明者劉剛, 王泉, 杜沖, 田冬東, 張敬, 佘陳承 申請人:西安電子科技大學(xué)