亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Java點對點通信技術(shù)的DES密鑰交換

        2012-04-29 08:45:24汪志達(dá)
        計算機時代 2012年11期

        汪志達(dá)

        摘要: 介紹了使用Java的點對點通信技術(shù),基于Diffie-Hellman規(guī)則,給出了IBM DES密鑰交換的總體方案、算法和應(yīng)用程序,詳細(xì)說明了其中涉及的主要技術(shù)和方法,同時給出了在PC機上用二進制指數(shù)分解法實現(xiàn)大數(shù)模運算的算法分析和實現(xiàn)方案。

        關(guān)鍵詞: 密鑰交換; Java; DES; Diffie-Hellman

        中圖分類號:TP301.6;311.11文獻標(biāo)志碼:A 文章編號:1006-8228(2012)11-23-03

        Interchange of DES cipher key based on Java p2p communication technology

        Wang Zhida

        (Ningbo Polytechnic, Ningbo, Zhejiang 315800, China)

        Abstract: The scheme, module, and application program of IBM DES cipher key interchange by Diffie-Hellman rules based on Java P2P communication technology are introduced. The related techniques and methods in detail are explained. The module analysis and the implementation scheme of calculating large figure modulus on PC with binary index decomposing method are given.

        Key words: cipher key interchange; Java; DES; Diffie-Hellman

        0 引言

        在IBM DES加密傳輸應(yīng)用中,如果是首次通信或密鑰已過期,則需要進行Diffie-Hellman密鑰交換[6]。本文使用Java的點對點通信技術(shù)和二進制指數(shù)分解法[1]設(shè)計Diffie-Hellman密鑰交換應(yīng)用程序,如圖1、圖2所示。

        圖1密鑰交換服務(wù)端

        圖2密鑰交換客戶端

        密鑰交換雙方運行各自的程序,一方以客戶機方式連接另一方(服務(wù)端),設(shè)定任意的初始值(Diffie-Hellman運算指數(shù)),系統(tǒng)計算并交換密鑰種子,生成初始密鑰,經(jīng)DES系數(shù)和DES模數(shù)處理后得到DES密鑰。

        1 算法

        1.1 算法概要

        密鑰交換過程如圖3所示。

        [設(shè)定

        初始值m][密鑰

        k=f2(N,m)][

        密鑰

        交換

        程序

        ][公共通信網(wǎng)絡(luò)] [

        密鑰

        交換

        程序

        ][密鑰種子

        M=f1(m)][接收N][設(shè)定

        初始值n][密鑰

        k'=f2(M,n)][密鑰種子

        N=f1(n)][接收M]

        圖3密鑰交換過程

        程序預(yù)設(shè)兩個Diffie-Hellman運算基數(shù)p和q(大于80位二進制),程序運行時,交換雙方分別設(shè)定運算指數(shù)m/n(大于20位二進制),程序用Diffie-Hellman算法[5]計算密鑰種子:

        M=pm mod q

        N=pn mod q

        程序交換M/N后,計算密鑰:

        k=Nm mod q

        k'=Mn mod q

        根據(jù)模運算的性質(zhì):

        (pn mod q)m mod q=pnm mod q=pmn mod q=(pm mod q)n mod q

        所以:

        k=k'

        1.2 算法設(shè)計

        由于pm、pn以及Nm、Mn這樣的大數(shù),已遠(yuǎn)遠(yuǎn)超出了現(xiàn)有計算機處理數(shù)據(jù)的范圍,本文用二進制指數(shù)分解法進行計算,概括如下(設(shè)要計算PD mod Q):

        將D轉(zhuǎn)換成二進制數(shù)B(設(shè)為bnbn-1…b1b0),各位從右到左依次存入bi(i=0,1,2,...,n,bi=0或1),得到D的分解式:

        bn×2n+bn-1×2n-1+......+b1×21+b0×20

        式中各項從右到左依次存入di(i=0,1,2,...,n),得到PD的分解式:

        按照模運算的規(guī)律,若數(shù)列(x=0,1,2,...,n)中大于Q的最小元素是(0≤t≤n),且 mod Q=T,則:

        mod Q

        等價于

        mod Q

        在程序中可使用循環(huán),逐步減小PD分解式中指數(shù)較大的項,同時,利用模運算的如下性質(zhì)[3]:

        (X*Y*Z) mod Q=(((X*Y) mod Q)*Z) mod Q

        得到算式PD mod Q中PD的可計算等價數(shù)(設(shè)為A),然后計算A mod Q的結(jié)果。

        1.3 算法實現(xiàn)

        按照上述算法,用Java實現(xiàn)如下:

        import java.io.*;

        public class clfm

        {public static void main(String args[]) throws Exception

        {long p=2000000001,d=9223372036854775807L,

        q=2147483647,t,result,temp;

        int i,j,k,n;

        long data[][]=new long[200][2];

        System.out.println("");

        /*多項式轉(zhuǎn)換*/

        i=1; j=0;

        do

        {t=d%2*i;

        if(t!=0) /*data[j][0]存底數(shù),data[j][1]存指數(shù)*/

        {data[j][0]=p; data[j][1]=t; j++;

        }

        i=i*2; d=d/2;

        } while(d!=0); j--;

        /*多項式化簡*/

        result=1;

        temp=p; /*data[j][0]存底數(shù),data[j][1]存指數(shù)*/

        while(true)

        {i=1;

        while((((long)i)<=data[j][1])&&(userPow(temp,i)

        i=i*2;

        if(((long)i)>data[j][1])

        break; /*在數(shù)列p2i中找大于q的最小元素*/

        else

        {for(n=0;data[n][0]!=temp;n++);

        for(;data[n][1]<((long)i);n++);

        temp=userPow(temp,i)%q;

        for(k=n; k<=j; k++) /*將本次化簡的結(jié)果依次存入二維

        數(shù)組中*/

        {data[k][0]=temp; data[k][1]=data[k][1]/i;

        }

        }

        }

        for(i=1;i<=j;i++) /*變累乘后模除q為每乘一次就模除q*/

        {data[i][0]=(data[i-1][0]*data[i][0])%q;

        }

        result=data[j][0];

        System.out.println(String.valueOf(result));

        }

        /*自定義冪運算函數(shù)*/

        public static long userPow(long uPtemp,long uPi)

        {long uPresult=1;

        for(int uPk=1; uPk<=uPi; uPk++)

        uPresult*=uPtemp;

        return uPresult;

        }

        }

        2 應(yīng)用程序設(shè)計

        程序組成結(jié)構(gòu)如圖4所示。

        2.1 服務(wù)端/客戶端程序設(shè)計

        分別設(shè)計服務(wù)端和客戶端程序,使用Java的點對點通信技術(shù)[4]實現(xiàn)密鑰交換。程序運行后,服務(wù)器在指定端口捕捉客戶機的連接請求,客戶機連接到服務(wù)器后雙方建立Socket類型的連接通道。雙方各自設(shè)定Diffie-Hellman運算指數(shù),發(fā)送密鑰種子,程序利用Socket通道的即時特性,實時接收對方的密鑰種子。在檢測到已發(fā)送了本方的密鑰種子和接收了對方的密鑰種子后,程序自動計算密鑰。設(shè)計要點如下:

        ⑴ 服務(wù)端程序在指定端口(本文使用4000端口)建立ServerSocket連接服務(wù),捕捉客戶端的Socket連接請求,建立點對點的連接通道,創(chuàng)建基于通道的輸入輸出流;接收客戶端的密鑰種子;根據(jù)設(shè)定的Diffie-Hellman運算指數(shù)計算本地密鑰種子,通過輸出流發(fā)送;最后根據(jù)客戶端的密鑰種子和運算指數(shù)計算密鑰。

        ⑵ 客戶端程序在指定端口請求服務(wù)端的Socket連接,建立點對點的連接通道,創(chuàng)建基于通道的輸入輸出流;接收服務(wù)端的密鑰種子;根據(jù)設(shè)定的Diffie-Hellman運算指數(shù)計算本地密鑰種子,通過輸出流發(fā)送;最后根據(jù)服務(wù)端的密鑰種子和運算指數(shù)計算密鑰。

        [項目\&名稱\&KeyInterchange(服務(wù)端)

        KeyInterchange2(客戶端)\&][主類\&名稱\&KIserver(服務(wù)端)

        KIclient(客戶端)\&功能\&含有作為程序入口的

        main方法;

        創(chuàng)建用戶窗體類的對象。\&][用戶窗體類\&名稱\&MyFrame\&功能\&設(shè)計有jbInit等方法;

        界面設(shè)計;

        網(wǎng)絡(luò)連接;

        密鑰交換等。\&][用戶自定義類模塊\&名稱\&ClfmClass\&功能\&提供clfm方法;

        采用二進制指數(shù)分解法進行大數(shù)模運算。\&]

        圖4程序組成結(jié)構(gòu)

        2.2 模塊化算法程序

        將算法程序制作成方法:

        long clfm(long, long, long)

        定義在類模塊ClfmClass中,如下:

        import java.io.*;

        public class ClfmClass {

        public static long clfm(long p,long d,long q) throws Exception

        {long t,result,temp;

        int i,j,k,n;

        long data[][]=new long[200][2];

        (……)

        return result;

        }

        public static long userPow(long uPtemp,long uPi)

        {

        (……)

        }

        }

        3 結(jié)束語

        本文通過程序?qū)崿F(xiàn)了點對點密鑰交換,該軟件在Internet/Intranet及單機上測試成功,運算時間不超過1秒。軟件運行環(huán)境為P4/2G、512M、Windows2000/XP。為便于驗證,設(shè)定Diffie-Hellman運算基數(shù)p=50000001、q=70000001,DES系數(shù)r=1,DES模數(shù)u=1000000,而在實際應(yīng)用中應(yīng)根據(jù)需要按規(guī)定位數(shù)設(shè)定。由于本設(shè)計使用的是32位系統(tǒng),只能直接生成最大32位密鑰,用DES系數(shù)和DES模數(shù)處理后,得到56位密鑰。目前64位系統(tǒng)已漸趨普及,升級到64位系統(tǒng)后,能直接生成最大64位密鑰。也可將本文的算法及程序整合應(yīng)用到其他采用非公開密鑰的各種比特加密系統(tǒng)中[2],使加密傳輸更加方便、可靠。

        參考文獻:

        [1] [美]William A. Shay著,高傳善譯.數(shù)據(jù)通信與網(wǎng)絡(luò)教程[M].機械工業(yè)

        出版社,2000.

        [2] 胡建偉.網(wǎng)絡(luò)安全與保密[M].西安電子科技大學(xué)出版社,2003.

        [3] 裴禮文.數(shù)學(xué)分析中的典型問題與方法[M].高等教育出版社,2001.

        [4] 王萌.Java程序設(shè)計[M].冶金工業(yè)出版社,2004.

        [5] Stinson D. Cryptograph: Theory and Practice[M].Boca Raton, FL:

        CRC Press,1995.

        [6] Stallings W. Network and Internet Security[M].Englewood Cliffs,

        NJ:Prentice-Hall,1995.

        成年女人a毛片免费视频| 91亚洲夫妻视频网站| 美女脱了内裤洗澡视频| 国内精品久久久久影院薰衣草| 性欧美大战久久久久久久久| 久久精品成人91一区二区| 国产精品自拍视频免费观看| 久久精品国产99国产精品澳门| 欧美亚洲国产片在线播放| 亚洲国产另类久久久精品小说| 日韩av在线免费观看不卡| 国产精品偷窥熟女精品视频| 无码精品日韩中文字幕| 亚洲免费视频网站在线| 日本在线免费不卡一区二区三区| 欧美老妇交乱视频在线观看| 亚洲旡码a∨一区二区三区| 免费国产黄片视频在线观看| 久久久精品国产老熟女| 无码国产精品一区二区av| 九九视频在线观看视频6| 欧美亚洲国产精品久久久久| 午夜精品久久99蜜桃| 亚洲av综合永久无码精品天堂| 天天狠狠综合精品视频一二三区| 国产精品99久久精品女同| 国产亚洲精品久久午夜玫瑰园| 久久中文字幕无码专区| 日本精品免费一区二区三区| 午夜精品男人天堂av| 乱子伦一区二区三区| 狠狠久久久久综合网| 亚洲一区二区三区在线更新| 尹人香蕉久久99天天拍| 成人一区二区免费视频| 无码av永久免费大全| 亚洲色图在线免费视频| 亚洲综合久久精品无码色欲| 不卡国产视频| 一区二区三区四区黄色av网站| 人妻少妇乱子伦精品无码专区电影|