亚洲免费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.

        人妻少妇精品中文字幕av| 区二区三区亚洲精品无| 久久国产精品免费一区二区三区 | 中文字幕亚洲欧美在线不卡| 99久久国产综合精品女图图等你| 抽搐一进一出试看60秒体验区| 久久精品中文字幕久久| 亚洲av成人久久精品| 久久精品蜜桃亚洲av高清| 在线播放五十路熟妇| 亚洲av永久无码精品一区二区| 欧美日韩国产在线观看免费| av毛片一区二区少妇颜射| 久久综合激情的五月天| 手机在线看片| 野狼第一精品社区| Y111111国产精品久久久| 五月婷婷激情六月开心| 人妻一区二区三区在线看| 最新国产毛2卡3卡4卡| 男人扒开女人下面狂躁小视频| 中文字幕亚洲好看有码| 一区二区三区观看在线视频| 成人偷拍自拍视频在线观看| 老师露出两个奶球让我吃奶头| 国产亚洲av手机在线观看| 东京热无码人妻中文字幕| 国产精品高清视亚洲一区二区| 久久伊人网久久伊人网| 在线国产丝袜自拍观看| 国产爆乳无码一区二区麻豆| 国产精品对白刺激久久久| 9久9久女女热精品视频免费观看| 精品国产车一区二区三区| 国产午夜视频在线观看.| 粗大的内捧猛烈进出视频| 亚洲AⅤ无码日韩AV中文AV伦| 国产中文字幕亚洲综合| 激情五月我也去也色婷婷| 免费高清av一区二区三区| 亚洲av无码专区亚洲av桃|