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

        ?

        AES、RSA相結(jié)合的數(shù)據(jù)加密方案在Java中的實現(xiàn)

        2008-12-31 00:00:00趙航濤
        電腦知識與技術(shù) 2008年14期

        摘要:JAVA通過“SunJCF”技術(shù)向開發(fā)者提供了先進的加密技術(shù),在J2EE電子商務(wù)應(yīng)用中運用這些技術(shù)可以大大提高系統(tǒng)的數(shù)據(jù)安全性。該文主要研究了“SunJCF”中提供的AES、RSA加密算法的具體實現(xiàn)方法,提出了在Java中綜合運用AES和RSA算法加密數(shù)據(jù)文件的方案,并給出了相應(yīng)的Java程序。

        關(guān)鍵詞:JAVA;AES;RSA

        中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)14-20785-02

        1 引言

        由于Internet網(wǎng)絡(luò)協(xié)議本身存在著安全問題,網(wǎng)上信息傳輸存在著巨大的安全風(fēng)險,電子商務(wù)的安全問題越來越突出。加密技術(shù)是電子商務(wù)中最主要的安全技術(shù),加密方法的選取直接影響著電子商務(wù)活動中信息的安全程度。由于JAVA一開始就是面向網(wǎng)絡(luò)應(yīng)用的,它十分重視數(shù)據(jù)的安全性,在JDK1.1中就已支持DES加密技術(shù)。因此JAVA在電子商務(wù)中得到了廣泛的應(yīng)用。本文主要介紹在Java環(huán)境下使用AES和RSA加密算法對數(shù)據(jù)文件進行加密和解密。

        2 JAVA中的數(shù)據(jù)加密技術(shù)

        加密技術(shù)根據(jù)一般可以分為對稱加密技術(shù)和非對稱加密技術(shù)。對稱加密技術(shù)屬于傳統(tǒng)的加密技術(shù),它的加密和解密的密匙是相同的,它的優(yōu)點是:運算速度快,加密強度高,可以通過硬件方式來實現(xiàn),適合大批量數(shù)據(jù)的加密處理,它的缺點是:加密和解密由于使用相同的密匙,密匙的分發(fā)與保密比較困難,目前常用的對稱加密技術(shù)有DES、3DES和AES,DES是舊的加密標準,它的密匙長度為56位,加密強度較低,已被認為不是安全的加密技術(shù)。3DES是對DES的改進,對明文用三個不同的DES密匙進行DES加密、解密和再加密,這樣可以提高加密強度。AES是新的加密標準,它是DES的替代者,它的密匙長度有128、192和256三種,目前還沒有被人攻破。非對稱加密技術(shù)屬于現(xiàn)加密技術(shù),它的加密與解密的密匙是不相同的,一個是私匙,一個是公匙,它的特點是:加密強度比較小,加密的速度比較慢,常用于數(shù)字鑒名和加密密匙,目前使用的非對稱加密技術(shù)主要有RSA和ECC,其中1024位的RSA是目前使用最為廣泛的非對稱加密技術(shù)。

        JAVA語言的安全性是十分出色的,在JAVA中通過“SunJCF”提供對各種加密技術(shù)的支持。在JAVA還可以安裝其它公司的加密包,使用“SunJCF”所不支持的其它加密算法。早在JDK1.1中就已支持DES數(shù)據(jù)加密技術(shù),在JDK1.5中支持DES、3DES、AES等對稱加密技術(shù),在非對稱加密技術(shù)方面支持RSA技術(shù)。

        3 JAVA中的數(shù)據(jù)加密類

        (1)KeyGenerator類用于獲得各類對稱加密技術(shù)的密匙,主要的方法有:

        getInstance(\"加密算法字符串\"),用于設(shè)置要獲得的密匙的加密算法;

        init(),用于初始化對稱加密的密匙對象;

        generateKey(),從對稱加密的密匙對象中取得密匙。

        (2)KeyPairGenerator類用于獲得非對稱加密技術(shù)的密匙,主要的方法有:

        etInstance(\"非對稱加密算法字符串\"),用于設(shè)置要獲得的密匙的加密算法;

        initialize(密匙長度),用于初始化非對稱加密的密匙對象;

        generateKeyPair(),返回非對稱密匙組對象;

        getPublic(),從非對稱密匙組中取得公匙;

        getPrivate(),從非對稱密匙組中用于取得私匙。

        (3)Cipher類是JAVA加密的主要類,用于按一定的算法對數(shù)據(jù)進行加密、解密、包裝和返包裝。主要的方法有:

        getInstance(\"加密算法字符串\"),用于設(shè)置要使用的加密算法;

        Init(\"類型\",密匙),按提供的類型和密匙初始化加密對象;

        getBLockSize(),用于返回加密算法的輸入分組長度;

        getOutputSize(),用于返回加密算法的輸出分組長度;

        update(inBytes,blockSize,outBytes),對inBytes進行加密或解密處理,并將處理結(jié)果輸出到outBytes中;

        doFinal(),對要不足分組長度的數(shù)據(jù)進行填充處理。

        4 AVA中實現(xiàn)AES和RSA相結(jié)合的數(shù)據(jù)加解密

        (1)根據(jù)前面有關(guān)對稱加密技術(shù)和非對稱加密技術(shù)的分析,在電子應(yīng)用于一般采用對稱加密技術(shù)和非對稱加密技術(shù)相結(jié)合的方法。在下面的例子中利用AES(對稱加密技術(shù))加密數(shù)據(jù)文件,利用RSA(非對稱加密技術(shù))加密AES加密密匙,這樣即可以提高加密的速度,又可以解決AES密匙自身的安全性。由于數(shù)據(jù)文件進行了加密因此可以通過普通的電子郵件系統(tǒng)完成加密文件的傳輸。AES和RSA相結(jié)合的數(shù)據(jù)文件加解密過程如下:

        ①接受方:生成1024位的RSA密匙對,然后通過電子郵件向發(fā)送方發(fā)送自己的公匙數(shù)據(jù)。

        ②發(fā)送方:第一步通過電子郵件取得接受方的RSA公匙數(shù)據(jù);第二步隨機生成AES密匙;第三步用獲得的RSA公匙和RSA加密算法加密AES密匙并將加密后的AES密匙寫入數(shù)據(jù)文件的頭部;第四步用AES密匙和AES加密算法加密數(shù)據(jù),并將加密后的數(shù)據(jù)寫出入數(shù)據(jù)文件的尾部;最后通過電子郵件,以附件的形式將數(shù)據(jù)文件發(fā)送給接收方。

        ③接收方:第一步從接受到的郵件的附件中讀取加密后的AES密匙;第二步用自己的私匙和RAS算法解密AES密匙;第三步接著從接受到的郵件的附件中讀取加密數(shù)據(jù),用解密后的AES密匙和ASE算法解密加密數(shù)據(jù),并將解密后的數(shù)據(jù)寫入數(shù)據(jù)文件。

        (2)在JAVA中實現(xiàn)上述AES和RSA算法相結(jié)合的數(shù)據(jù)加解密過程是十分容易的,具體源程序如下:

        import java.io.*;

        import java.security.*;

        import javax.crypto.*;

        import javax.crypto.spec.*;

        public classAes_Rsa_ Encrypt

        {public static void main(String[] args)

        {try

        {if(args[0].equals(\"-g\")) //生成RSA密匙對

        {KeyPairGenerator keyGen = KeyPairGenerator.getInstance(\"RSA\");

        SecureRandom random=new SecureRandom();

        keyGen.initialize(1024,random);

        KeyPair keypair = keyGen.generateKeyPair();

        ObjectOutputStream out =new ObjectOutputStream(new FileOutputStream (\"pub_key\"));

        out.writeObject(keypair.getPublic());

        out.close();

        out =new ObjectOutputStream(new FileOutputStream(\"pri_key\"));

        out.writeObject(keypair.getPrivate());

        out.close();}

        else if(args[0].equals(\"-e\"))//對指定的數(shù)據(jù)文件進行加密處理

        {KeyGenerator keyGen = KeyGenerator.getInstance(\"AES\");

        keyGen.init(128);

        SecretKey key=keyGen.generateKey();

        ObjectInputStream keyIn =new ObjectInputStream(new FileInputStream (\"pub_key\"));

        Key publicKey=(Key)keyIn.readObject();

        keyIn.close();Cipher cipher=Cipher.getInstance(\"RSA\");

        cipher.init(Cipher.WRAP_MODE,publicKey);

        byte[] wrappedKey=cipher.wrap(key);

        DataOutputStream out=new DataOutputStream(new FileOutputStream(args[2]));

        out.writeInt(wrappedKey.length);

        out.write(wrappedKey);

        InputStream in=new FileInputStream(args[1]);

        cipher=Cipher.getInstance(\"AES\");

        cipher.init(Cipher.ENCRYPT_MODE,key);

        crypt(in,out,cipher);

        in.close();

        out.close();}

        else if(args[0].equals(\"-d\"))//對指定的加密文件進行解密處理

        {DataInputStream in=new DataInputStream(new FileInputStream(args[1]));

        int length=in.readInt();

        byte[] wrappedKey=new byte[length];

        in.read(wrappedKey,0,length);

        ObjectInputStream keyIn =new ObjectInputStream(new FileInputStream (\"pri_key\"));

        Key privateKey=(Key)keyIn.readObject();

        keyIn.close();

        Cipher cipher=Cipher.getInstance(\"RSA\");

        cipher.init(Cipher.UNWRAP_MODE,privateKey);

        Key key=cipher.unwrap(wrappedKey,\"AES\",cipher.SECRET_KEY);

        OutputStream out=new FileOutputStream(args[2]);

        cipher=Cipher.getInstance(\"AES\");

        cipher.init(Cipher.DECRYPT_MODE,key);

        crypt(in,out,cipher);

        in.close();

        out.close();}}

        catch (IOException exception)

        {exception.printStackTrace();}

        catch (GeneralSecurityException exception)

        { exception.printStackTrace(); }

        catch (ClassNotFoundException exception)

        {exception.printStackTrace();}}

        public static void crypt(InputStream in,OutputStream out,Cipher cipher) throws IOException,GeneralSecurityException//自己定義的加密函數(shù)

        {int blockSize=cipher.getBlockSize();

        int outputSize=cipher.getOutputSize(blockSize);

        byte[] inBytes=new byte[blockSize];

        byte[] outBytes=new byte[outputSize];

        int inLength=0;

        boolean more=true;

        while(more)

        {inLength=in.read(inBytes);

        if(inLength==blockSize)

        {int outLength=cipher.update(inBytes,0,blockSize,outBytes);

        out.write(outBytes,0,outLength);}

        else

        {more=1;}}

        if(inLength>0)

        outBytes=cipher.doFinal(inBytes,0,inLength);

        else

        outBytes=cipher.doFinal();

        out.write(outBytes);}

        public static final int KEYSIZE=1024;}

        本程序可以完成RSA密匙的生成、數(shù)據(jù)加密和數(shù)據(jù)解密。運行前用javac進行對Aes_Rsa_ Encrypt.java文件進行編譯,然后按如下方法執(zhí)行:

        (1) 生成RSA算法的私匙文件(文件名為pri_key)和公匙文件(文件名為pub_key)

        java Aes_Rsa_Encrypt -g keyfile

        (2) 對指定的數(shù)據(jù)文件中的內(nèi)容進行加密,并將結(jié)果寫出入指定的加密文件

        java Aes_Rsa_Encrypt -e 數(shù)據(jù)文件名 加密文件名

        (3) 對指定的加密文件中的內(nèi)容進行解密,并將結(jié)果寫出入指定的解密文件

        java Aes_Rsa_Encrypt -d 加密文件名 解密文件名

        本程序在JDK1.5下測試通過。

        參考文獻:

        [1] (美)Cay S.Horstmann,王建華,等譯. Java核心技術(shù)卷Ⅱ:高級特性[M].北京:機械工業(yè)計,20059.

        [2] 丁玲,等. JAVA與網(wǎng)絡(luò)安全[J].科技信息(學(xué)術(shù)研究),2007,(17):201.

        [3] 徐甜. Java平臺及應(yīng)用Java技術(shù)的安全問題研究[J].微計算機信息,2007,(18):216-218.

        [4] 趙航濤,等. 我國電子商務(wù)中的安全問題及對策[J].無錫職業(yè)技術(shù)學(xué)院,2006,(3):76-78.

        亚洲 自拍 另类小说综合图区| 2021国产精品久久| 2022国内精品免费福利视频| 色青青女同性恋视频日本熟女| 91精品亚洲熟妇少妇| 国产人妻鲁鲁一区二区| 在线高清理伦片a| 91老司机精品视频| 国产成人夜色在线视频观看| 国产丝袜美腿一区二区三区| 青青草在线免费播放视频| 人妻插b视频一区二区三区| 人妻av无码系列一区二区三区| 国产一区日韩二区欧美三区| 丁香九月综合激情| 国内国外日产一区二区| 亚洲av专区国产一区| 加勒比一本heyzo高清视频| 精品少妇一区二区三区免费观 | 无码精品a∨在线观看十八禁 | 日韩精品一区二区亚洲av| 亚洲国产精品国自产电影| 国产成版人性视频免费版| 最新中文字幕人妻少妇| 国产无吗一区二区三区在线欢| 影音先锋每日av色资源站| 国产特级全黄一级毛片不卡| 亚洲国产成人无码电影| 日韩av在线免费观看不卡| 亚洲大尺度无码无码专区| 18禁无遮拦无码国产在线播放| 麻豆第一区MV免费观看网站| 91极品尤物国产在线播放| 日本韩国亚洲三级在线| 亚洲无线码一区二区三区| 亚洲国产成人精品无码区99| 亚洲欧美国产精品久久久| av网站免费在线浏览| 精品乱人伦一区二区三区| 国产va免费精品高清在线| 精品国产AⅤ一区二区三区V免费|