999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Java線程池的Kuznyechik算法應用研究

2018-12-18 03:22:52
泰山學院學報 2018年6期

劉 聰

(德州學院 信息管理學院,山東 德州 253000)

分組密碼“Kuznyechik”是俄羅斯密碼標準算法集合(稱為GOST算法)之一。該算法能夠保證信息在傳輸過程中的機密性和完整性,它符合現代密碼的要求,具有安全、高效率、易用和靈活等優點。適用于開發、運用到各種用途的現代信息系統中,保護數據的安全。為了提高Kuznyechik算法在實際應用中的加密速度,本文根據Kuznyechik算法的特點,與Java線程池技術結合,提出采用線程池技術并行加密Kuznyechik的方法。

1 Java線程池技術[1]

通常情況下,加密程序都是單線程運行的。為了提高程序的加密速度,可以設置多個線程去運行。Java語言對多線程提供了非常優秀的支持,基本的Java線程模型有Thread類、Runnable接口、Callable接口、Future接口等。

線程池就是在程序運行時創建一定數量的線程保存起來,當需要時,從線程池中取出一個線程。完成相應任務后再放回到線程池中。通過線程池,可以有效降低資源消耗、提高程序響應速度、提高線程的可管理性。根據線程池的工作原理,算法程序需要線程池管理器、工作線程、任務隊列、數據加密實體幾個部分。

2 Kuznyechik算法介紹[2]

Kuznyechik在俄羅斯聯邦GOST R 34.12-2015的國家標準中定義,它有128比特的塊大小和256比特的密鑰長度。該算法是俄羅斯密碼標準算法集合(稱為GOST算法)之一。該算法可以在硬件和軟件中實現,能夠保證信息在傳輸過程中的機密性和完整性,它符合現代密碼的要求。該標準適用于開發,運用到各種用途的現代信息系統。

該算法包括密鑰編排和加密兩部分,密鑰編排算法是Feistel結構的,有左右兩支,在密鑰編排算法中,主密鑰k為256比特,分為k1和k2,各128比特。首先k1與常數c1相加,將得到的結果經過s盒,L置換,然后與k2相加,得左支到k1′,之前k1的值變成k2′。密鑰編排流程如圖1所示:

圖1 密鑰編排流程圖

經過8輪相同的運算,最后得到編排后的密鑰k3和k4,然后以同樣的方式生成k5和k6、k7和k8、k9和k10。其中L置換經過下面公式得到:

其中a是128位的,經過線性反饋移位寄存器轉16拍,其中轉換的定義如下:

其中ai是8位,a16是經過Ⅰ運算得到的,Ⅰ運算的定義如下:

I(a15,…,a0)=?(148·Δ(a15)+32·Δ(a14)

+133·Δ(a13)+16·Δ(a12)+194·Δ(a11)

+192·Δ(a10)+1·Δ(a9)+251·Δ(a8)

+1·Δ(a7)+192·Δ(a6)+194·Δ(a5)+16·Δ(a4))

+133·Δ(a3)+32·Δ(a2)+148·Δ(a1)+1·Δ(a0))

I運算的輸入是16個8位二進制數,輸出為1個8位二進制數。表示將8位二進制數轉換成有限域內的元素,▽是它的逆運算。經過有限域內的乘法運算,然后相加,最后轉換成1個8位二進制輸出。計算有限域乘法,首先要確定GF(2)上的8次不可約多項式。在該算法中,這個不可約多項式為

在加密算法中,明文塊a為128比特,密鑰k1,…,k10分別為128位,經過10輪運算,分別使用密鑰k1,…,k10。加密算法定義如下:

具體加密流程如圖2所示:

圖2 加密流程圖

3 基于Java線程池的Kuznyechik算法設計

Kuznyechik要進行10輪循環加密,因為根據算法的特點,事先進行密鑰編排,得到10個輪密鑰進行循環加密。根據加密算法的特點,本文設計了適用于Kuznyechik算法加密的線程池。首先創建任務實體,要加密數據的輸入和輸出保存到任務實體的屬性中。

public class encryptionData{

public String inputData;

public String outputData;

public String getInputData(){

return inputData;

}

public String getOutputData(){

return outputData;

}

public void setInputData(String inputData) {

this.inputData=inputData;

}

public void setOutputData(String outputData) {

this.outputData=outputData;

}

在主線程中,首先創建隊列和工作線程,然后創建任務實體,通過set方法給實體的屬性賦值,然后將加密數據對象實體加入到任務隊列中,最后不斷循環檢測工作線程的隊列是否為空,如果為空,說明數據已經加密完成,線程池銷毀[3-4]。在主線程工作的同時,工作線程不斷從任務隊列中取出任務實體,獲取要加密的內容,不斷進行加密,加密結束存儲密文,當工作線程將所有任務實體處理完后,隊列為空,線程池銷毀。具體運行流程如圖3所示。

圖3 Java線程池的kuznyechik算法流程圖

4 算法實現

根據算法原理和加密流程,本文采用128bit的密鑰,需要加密10輪。首先需要設計線程池管理類,該類內部成員包括線程池實體、任務隊列和工作線程實體,線程池實體使用單例模式來設計,并加入同步鎖保證線程池對象的唯一[5]。任務隊列用來存放加密實體對象,工作線程不斷從任務隊列中取出任務實體,從任務實體中獲取需要加密的明文,然后調用加密方法進行輪加密運算。以下是線程池管理類的主要代碼:

public class ThreadPool{

private static ThreadPool instance=null;

public List<encryptionData> taskQueue = Collections.synchronizedList (new LinkedList<encryptionData>());//任務隊列

//工作線程(真正執行任務的線程)

private WorkThread workQueue;

private ThreadPool(){

workQueue=new WorkThread();

}

public static synchronized ThreadPool getInstance(){

if(instance==null)

instance=new ThreadPool();

return instance;

}

public void addTask(encryptionData task){

//對任務隊列的操作上鎖

synchronized(taskQueue){

if(task!=null){

taskQueue.add(task);

taskQueue.notifyAll();

}

}

}

public void destory(){

workQueue.stopThread();

workQueue=null;

//對任務隊列的操作上鎖

synchronized(taskQueue){

taskQueue.clear();

}

}

工作線程的主要代碼如下:

public void run(){

while(isRuning){

encryptionData temp=null;

//對任務隊列的操作要上鎖

synchronized(taskQueue){

//任務隊列為空,等待新的任務加入

while(isRuning&&taskQueue.isEmpty()){

try{

taskQueue.wait(10);

}catch(InterruptedException e){

e.printStackTrace();

}

}

i( fisRuning)

temp=taskQueue.remove(0);

}

i(ftemp!=null){

isWaiting=false;

//執行加密函數

Encryption.encresult(temp.getInputData());

isWaiting=true;

}

}

在加密函數中,主要通過明文與密鑰相加運算,然后通過S盒和L運算,得到密文,其中,S盒和L運算的主要代碼如下:

進s盒運算,使用以下方法來實現,其中s盒的長度為256,返回的結果是s盒的輸出。

public static char[] sbox(char x[]){

for(int i=0;i<16;i++){

a[i]=(char)x[i];

c[i]= (char) s[a[i]];

}

return c;

}

L運算主要進行了16次R運算,主要代碼如下:

for(int i=0;i<16;i++){

char e= ltrans(k11);

for(int j=0;j<15;j++){

k11[j]=k11[j+1];

}

k11[15] =e;

}

其中,ltrans表示l運算。在l運算中,主要用到的是GF(2^8)有限域內乘法,這個域的最大值為256。有限域內的乘法使用以下的方法實現:

public static char multiply(char a, char b){

char temp[]={a,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

char tempmultiply=0x00;

int i=0;

for(i=1;i< 8;i++){

temp[i] =XTIME(temp[i-1]);

}

tempmultiply=(char)((b&0x01)*a);

for(i=1;i<=7;i++){

tempmultiply^=(((b >> i)&0x01)*temp[i]);

}

return tempmultiply;

}

在二進制中,所有的數都能用0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80異或得到,任何一個數b和a進行相乘,都可以表示為b和0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80分別相乘,然后異或得到。只要計算出b和這幾個數的乘積,一切結果都可以得到。XTIME方法的含義是求一個數與0x02的乘積,如果求一個數乘以2,一般是左移一位,本算法中,不可約多項式為p(x)=x8+x7+x6+x+1,如果最高位為1,再繼續左移會超出最大值,這時,左移1位的同時要異或0xc3。XTIME的具體實現代碼如下:

public static char XTIME(char x) {

int k=0x00;

if((x&0x80)!=0)

k=0xc3;

return(char)((((x << 1)^k))&0xff);

}

經過8次temp[i]=XTIME(temp[i-1])運算,temp數組中包含8個字符,分別為:a*0x01,a*0x02,a*0x04,a*0x08,a*0x10,a*0x20,a*0x40,a*0x80。然后經過8次tempmulti?ply^=(((b >> i)&0x01)*temp[i])運算,另一個乘數b首先進行1位右移,再和0x01與運算,然后分別和這8個字符相乘,把相乘的結果進行相加,得到a和b的乘積。

5 算法驗證

本文使用Java語句,在eclipse平臺進行測試,硬件采用Intel(R)CoreI-5(TM)i5-8400(主頻2.8GHZ,6核)32G內存的臺式機作為平臺進行測試。測試用到了加速比,未采用線程池和采用線程池程序加密算法的運行時間分別記為τa和τb,經過測試,結果如下表1所示:

表1 加密驗證結果

測試表明,在數據量比較少時,采用線程池比未采用線程池加密效率略高,但是隨著數據量的增大,采用線程池明顯比不采用線程池加密效率明顯增高。隨著數據量的增加,加速比逐漸變陡。下面是原始的測試數據,圖4-圖7:

圖4 1k數據加密示意圖

圖5 10k數據加密示意圖

圖6 100k數據加密示意圖

圖7 1000k數據加密示意圖

6 結束語

本文通過設計線程池,基于Java線程池技術,對Kuznyechik算法進行了改進,通過eclipse平臺進行測試,測試結果表明,隨著數據量的增大,能夠明顯增加加密的效率,縮短加密時間,為大數據環境下的加密奠定了基礎。在未來的研究中,將通過GPU的并行計算,來進一步提高加密效率。

主站蜘蛛池模板: 国产精品第一区| 色综合五月| 国产精品刺激对白在线| 九色91在线视频| 黄色网站不卡无码| 国产凹凸视频在线观看| 91丨九色丨首页在线播放| 中文字幕无码av专区久久| 日本成人在线不卡视频| 日日拍夜夜操| 久久国产精品影院| 99re热精品视频中文字幕不卡| 欧美精品一二三区| 国产女人综合久久精品视| 日本一区二区三区精品国产| 五月天久久综合国产一区二区| 亚洲国产日韩欧美在线| 免费一极毛片| 精品久久国产综合精麻豆| 亚洲国产欧美国产综合久久| 欧美在线国产| 日韩AV无码免费一二三区| 欧美伊人色综合久久天天| 无码日韩视频| 一本大道无码高清| 日韩精品无码免费专网站| 免费观看精品视频999| 国产中文一区a级毛片视频| 九九久久99精品| 蜜臀av性久久久久蜜臀aⅴ麻豆| 97在线观看视频免费| 日本黄色不卡视频| av在线手机播放| 免费视频在线2021入口| 国产精品区网红主播在线观看| 中文字幕在线欧美| 99爱在线| 99热最新在线| V一区无码内射国产| 99久久精品视香蕉蕉| 久久青草精品一区二区三区| 亚洲高清免费在线观看| 在线观看国产一区二区三区99| 欧美啪啪网| 国产亚洲精品自在线| 亚洲人成网址| 日本亚洲最大的色成网站www| 国产欧美另类| 国产97色在线| 无码精油按摩潮喷在线播放| 蜜臀AV在线播放| 亚洲天堂区| a亚洲视频| 久无码久无码av无码| 免费Aⅴ片在线观看蜜芽Tⅴ | 国产精品欧美亚洲韩国日本不卡| 日本尹人综合香蕉在线观看| 玩两个丰满老熟女久久网| 久久鸭综合久久国产| 国产亚洲精品在天天在线麻豆| 四虎影视8848永久精品| 亚洲成a人片77777在线播放| 99re在线视频观看| 欧美国产日韩一区二区三区精品影视| 亚洲福利网址| 蜜桃视频一区二区| 精品久久综合1区2区3区激情| 欧美激情视频一区二区三区免费| 亚洲 成人国产| AV网站中文| 欧美久久网| 国产精品刺激对白在线| 免费在线成人网| 在线精品视频成人网| 夜夜拍夜夜爽| 久久香蕉国产线看观看亚洲片| 99久久国产综合精品2023| а∨天堂一区中文字幕| 少妇高潮惨叫久久久久久| 伊人久久精品无码麻豆精品| 啊嗯不日本网站| 无码'专区第一页|