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

AES、RSA相結合的數據加密方案在Java中的實現

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

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

關鍵詞:JAVA;AES;RSA

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

1 引言

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

2 JAVA中的數據加密技術

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

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

3 JAVA中的數據加密類

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4 AVA中實現AES和RSA相結合的數據加解密

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

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

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

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

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

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\"))//對指定的數據文件進行加密處理

{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//自己定義的加密函數

{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密匙的生成、數據加密和數據解密。運行前用javac進行對Aes_Rsa_ Encrypt.java文件進行編譯,然后按如下方法執行:

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

java Aes_Rsa_Encrypt -g keyfile

(2) 對指定的數據文件中的內容進行加密,并將結果寫出入指定的加密文件

java Aes_Rsa_Encrypt -e 數據文件名 加密文件名

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

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

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

參考文獻:

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

[2] 丁玲,等. JAVA與網絡安全[J].科技信息(學術研究),2007,(17):201.

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

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

主站蜘蛛池模板: 亚洲色成人www在线观看| 日本黄色不卡视频| 国产农村精品一级毛片视频| 男女精品视频| 欧美黄网在线| 国产美女视频黄a视频全免费网站| 午夜免费小视频| 国产一区二区三区在线观看免费| 2024av在线无码中文最新| 亚洲免费毛片| 色爽网免费视频| 欧美成人看片一区二区三区| 亚洲第七页| 日本爱爱精品一区二区| h视频在线播放| 国产探花在线视频| 操操操综合网| 欧美成人第一页| 丁香婷婷激情综合激情| 欧美性色综合网| 日韩精品一区二区三区视频免费看| 国产精品偷伦在线观看| 久久国产精品国产自线拍| 久久毛片网| 久久久久久久久18禁秘| 欧美一级在线| 91久久夜色精品国产网站| 青草国产在线视频| 国产亚洲高清在线精品99| 日韩久久精品无码aV| 欧亚日韩Av| 手机看片1024久久精品你懂的| 毛片卡一卡二| 亚洲综合九九| 色欲色欲久久综合网| 99视频全部免费| 99久久精品视香蕉蕉| 日本一区二区三区精品视频| 九九免费观看全部免费视频| 国产成人久久综合777777麻豆| 亚洲欧美另类色图| 欧美一区二区啪啪| 亚洲一级毛片在线观播放| 青青国产在线| 91久久偷偷做嫩草影院| 国产无码精品在线| 精品自窥自偷在线看| 沈阳少妇高潮在线| 国产精品.com| 亚洲二区视频| 四虎精品国产AV二区| 欧美综合成人| 久久无码av一区二区三区| 亚洲一级毛片在线观| 88国产经典欧美一区二区三区| 国产成人成人一区二区| 国产区在线观看视频| 2022国产无码在线| 高清视频一区| 最新精品国偷自产在线| 最新国产午夜精品视频成人| 欧美不卡在线视频| 亚洲熟女偷拍| 伊人中文网| 欧美亚洲第一页| 奇米影视狠狠精品7777| 视频在线观看一区二区| 国产精品分类视频分类一区| 国产综合另类小说色区色噜噜| 免费国产高清精品一区在线| 国产精品永久免费嫩草研究院| 精品国产福利在线| 97国产在线观看| 青青草一区| 华人在线亚洲欧美精品| 欧美精品影院| 久久久久国产一区二区| 天天爽免费视频| 欧美一级夜夜爽| 激情六月丁香婷婷| 日韩亚洲综合在线| 小说 亚洲 无码 精品|