加密技術(shù)在公文流轉(zhuǎn)系統(tǒng)中的應(yīng)用
隨著信息技術(shù)在我國(guó)的昔及,各類信息技術(shù)不斷的應(yīng)用于備單位中,極大的提高了辦公效率。過(guò)去的公文處理過(guò)程十分復(fù)雜,經(jīng)常由于個(gè)人原因?qū)墓芾聿划?dāng),導(dǎo)致公文丟失或未及時(shí)審批。因此,需要開(kāi)發(fā)公文流轉(zhuǎn)系統(tǒng),讓工作人員從復(fù)雜的公文處理事務(wù)中解放出來(lái),從而提高工作效率,降低成本,實(shí)現(xiàn)辦公自動(dòng)化。但是現(xiàn)在的公文流轉(zhuǎn)系統(tǒng)安全系數(shù)又比較低,為此,我們迎合辦公信息化的實(shí)際需求,在系統(tǒng)中采用了公開(kāi)密鑰加密以及秘密密鑰加密算法,實(shí)現(xiàn)了公文流轉(zhuǎn)系統(tǒng)的安全要求。
一、信息安全的關(guān)鍵技術(shù)
信息安全的關(guān)鍵技術(shù)包括加密技術(shù)和數(shù)字簽名技術(shù),加密技術(shù)通常分為兩類:“對(duì)稱式”和“非對(duì)稱式”;數(shù)字簽名是涉及簽名信息和簽名人私匙的計(jì)算結(jié)果。
二、加密技術(shù)在公文流轉(zhuǎn)系統(tǒng)中的應(yīng)用
1、一對(duì)多的公開(kāi)發(fā)文模型
在公文流轉(zhuǎn)中,若上級(jí)向下級(jí)分發(fā)文件,并且該文件可以公開(kāi),則在這種情況下,公文以明文發(fā)送,系統(tǒng)采用的模型如圖1所示。
模型描述的過(guò)程如下:
①發(fā)送者S采用消息摘要算法對(duì)公文P生成消息摘要D;
②S使用其私鑰SK2對(duì)摘要進(jìn)行簽名得DC;
③S將P、DC發(fā)送給接收者R。至此,發(fā)送者S完成了其簽名過(guò)程,將簽名過(guò)的公文傳送給了R;
④R將接收到的明文用消息摘要算法計(jì)算出摘要;
⑤R用R的公鑰SK1對(duì)A的簽名進(jìn)行解密;
⑥R將解密得到的摘要同算出的摘要進(jìn)行比較,若摘要相同,則S的發(fā)文證明為真實(shí)、有效的,反之發(fā)文則無(wú)效。
2、一對(duì)一的秘密發(fā)文模型
在公文流轉(zhuǎn)過(guò)程中,若發(fā)文者和收文者以一對(duì)一的方式發(fā)送,即公文既要以加密形式發(fā)送,又要實(shí)現(xiàn)發(fā)文人的簽名,則系統(tǒng)采用一對(duì)一的秘密發(fā)文模型,其模型如圖2所示。
模型描述的過(guò)程如下:
①發(fā)送者S用消息摘要算法對(duì)公文P產(chǎn)生摘要D;
②S使用其私鑰SK2對(duì)摘要進(jìn)行簽名得D1;
③S隨機(jī)產(chǎn)生一對(duì)對(duì)稱密鑰K;
④S使用AES算法對(duì)公文P進(jìn)行加密得P1;
⑤S使用R的公鑰RK1對(duì)K進(jìn)行加密得K1;
⑥S將K1、P1、D1發(fā)送給接收者R。至此,公文的加密和簽名已經(jīng)完成;
⑦R將取到的K1用其私鑰RK2進(jìn)行解密得AES密鑰K;
⑧R用K將P1解密得明文P。R用消息摘要算法對(duì)明文P產(chǎn)生摘要。R用S的公鑰SK1對(duì)S的簽名進(jìn)行解密;
⑨R將解密得到的摘要同計(jì)算出的摘要進(jìn)行比較,若摘要相同,則公文為S所發(fā)為真,否則為假。另外根據(jù)比較摘要便能發(fā)現(xiàn)公文是否在傳輸過(guò)程中被篡改。
三、公文流轉(zhuǎn)系統(tǒng)中加密算法和解密算法的研究與實(shí)現(xiàn)
1、秘密密鑰加密
加密與解密密鑰是相同的,或者可以在一定時(shí)間內(nèi)用加密密鑰算出解密密鑰,具備這種特征的算法稱為秘密密鑰算法、私有密鑰算法或?qū)ΨQ算法。
(1)秘密密鑰加密的基本步驟:
①javax.crypto包導(dǎo)入;
②SecretKey接口封裝密鑰;
③SecretKey對(duì)象由KeyGenerator類產(chǎn)生,將算法名傳給static getlnstance()方法;
④通過(guò)將密碼參數(shù)傳給Cipher類的staticgetlnstance()方法生成Cipher對(duì)象;
⑤通過(guò)調(diào)用init()方法并指定加密方式和Secret-Key對(duì)象,初始化Cipher對(duì)象;
⑥CipherOutputStream對(duì)象進(jìn)行加密并將密文寫入輸出流。CipherOutputStream構(gòu)造器取輸出流名和Cipher對(duì)象作為變?cè)?/p>
(2)主要對(duì)稱算法有:DES(實(shí)際密鑰只用到56位)
和AES(支持三種密鑰長(zhǎng)度:128、192、256位),通常首先128位,其他的還有DESede等,JDK1.5種也提供了對(duì)對(duì)稱算法的支持。由于AESE-效率比非對(duì)稱的效率高,因而本系統(tǒng)采用該加密算法對(duì)公文進(jìn)行加密、解密。加密實(shí)現(xiàn)的部分代碼如下:
//將算法名AES傳給getlnstance()方法
KeyGenerator keyGen=KeyGenerator.getlnstance(“AES”);
keyGen.init(128);//采用128位長(zhǎng)度的密鑰
key=keyGen.generateKey();
//獲得一個(gè)私鑰加密類Cipher,ECB是加密方式,
PKCS5Padding是填充方法
cipher=Cipher.getInstanceC'AES/EC B/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
由于秘密密鑰加密算法運(yùn)行速度相對(duì)較慢,因此選擇秘密密鑰算法對(duì)公文的摘要進(jìn)行加密,加密用的密鑰由系統(tǒng)產(chǎn)生,為了使接收方能對(duì)密文進(jìn)行解密,需將密鑰傳給對(duì)方。為防止密鑰被截獲,傳輸前首先對(duì)這個(gè)秘密密鑰進(jìn)行非對(duì)稱加密,如圖3所示。
2、公開(kāi)密鑰加密
RSA加密算法作為一種非對(duì)稱密碼算法在信息安全領(lǐng)域得到了廣泛的應(yīng)用,其既可以用于數(shù)據(jù)加密也可以用于數(shù)字簽名。本系統(tǒng)將用RSA加密算法來(lái)對(duì)秘密密鑰進(jìn)行加密,使用公開(kāi)密鑰對(duì)文件進(jìn)行加密傳輸?shù)膶?shí)際過(guò)程包括四步:
①發(fā)送方生成一個(gè)自己的私有密鑰并用接收方的公開(kāi)密鑰對(duì)自己的私有密鑰進(jìn)行加密,然后通過(guò)網(wǎng)絡(luò)傳輸?shù)浇邮辗剑?/p>
②發(fā)送方對(duì)需要傳輸?shù)奈募米约旱乃接忻荑€進(jìn)行加密,然后通過(guò)網(wǎng)絡(luò)把加密后的文件傳輸?shù)浇邮辗剑?/p>
③接收方用自己的公開(kāi)密鑰進(jìn)行解密后得到發(fā)送方的私有密鑰;
④接收方用發(fā)送方的私有密鑰對(duì)文件進(jìn)行解密得到文件的明文形式。
下面是產(chǎn)生RSA密鑰對(duì)的代碼實(shí)現(xiàn):
KeyPairGenerator keyGen=KeyPairGenerator.getlnstance(“RSA”);
keyGen.initialize(1024);
keypair=keyGen.generateKeyPair();
PublicKey publickey=key.getPublic();
PrivateKey privatekey=key.getPrivate();
當(dāng)發(fā)文給多個(gè)對(duì)象時(shí),系統(tǒng)首先讓發(fā)送方下載自己的私鑰,對(duì)公文進(jìn)行非對(duì)稱加密,然后發(fā)送給下一個(gè)接收者。接收方收到密文,需要首先到密鑰數(shù)據(jù)庫(kù)下載發(fā)送方對(duì)外公布的公開(kāi)密鑰,才能對(duì)密文進(jìn)行解密,如圖4所示。
小知識(shí)之公文
公文是各級(jí)各類國(guó)家機(jī)構(gòu)、社會(huì)團(tuán)體和企事業(yè)單位在處理公務(wù)活動(dòng)中有著特定的效能和廣泛的用途的文書(shū),它能夠超越時(shí)空的限制,為國(guó)家管理提供所需的信息。









