Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統(tǒng)計(jì)

          留言簿(23)

          積分與排名

          優(yōu)秀學(xué)習(xí)網(wǎng)站

          友情連接

          閱讀排行榜

          評(píng)論排行榜

          電子商務(wù)使用數(shù)據(jù)加密來保護(hù)數(shù)據(jù)庫

            摘?要:本文首先分析了數(shù)據(jù)庫數(shù)據(jù)需要加密的原因,簡(jiǎn)要介紹了DES算法及Java密碼體系和Java密碼擴(kuò)展,最后說明了利用DES加密算法保護(hù)數(shù)據(jù)庫數(shù)據(jù)的方法及步驟。

            關(guān)鍵詞?電子商務(wù)?Java?加密?DES算法

            Java語言是一種非常適用于網(wǎng)絡(luò)編程的語言,它的基本結(jié)構(gòu)與C++極為相似,但拋棄了C/C++中指針等內(nèi)容,同時(shí)它吸收了Smalltalk、C++面向?qū)ο蟮木幊趟枷搿K哂泻?jiǎn)單性、魯棒性、可移植性、動(dòng)態(tài)性等特點(diǎn)。這些特點(diǎn)使得Java成為跨平臺(tái)應(yīng)用開發(fā)的一種規(guī)范,在世界范圍內(nèi)廣泛流傳。

            數(shù)據(jù)庫數(shù)據(jù)需要加密的原因

          ????電子商務(wù)網(wǎng)站中,數(shù)據(jù)庫的信息至關(guān)重要,尤其現(xiàn)在貨物的實(shí)時(shí)交易,使得一些比較重要的信息不得不存儲(chǔ)在數(shù)據(jù)庫或者其它容易泄露或者不安全的地方(當(dāng)然,也沒有絕對(duì)安全的),例如數(shù)字商品信息、銀行卡賬號(hào)等,一旦諸如黑客一般的網(wǎng)絡(luò)高手成功入侵到我們的系統(tǒng),如果我們的數(shù)據(jù)庫信息沒有加密,那么我們所有的東西便拱手相送了,這不僅危害了商戶的利益,更使得客戶遭受損失,進(jìn)一步也會(huì)影響中國(guó)電子商務(wù)的里程,所以數(shù)據(jù)庫中一些重要信息的加密起到的很重要的作用。
           
            Java密碼體系和Java密碼擴(kuò)展

            Java密碼體系(JCA)和Java密碼擴(kuò)展(JCE)的設(shè)計(jì)目的是為Java提供與實(shí)現(xiàn)無關(guān)的加密函數(shù)API。它們都用factory方法來創(chuàng)建類的例程,然后把實(shí)際的加密函數(shù)委托給提供者指定的底層引擎,引擎中為類提供了服務(wù)提供者接口在Java中實(shí)現(xiàn)數(shù)據(jù)的加密/解密,是使用其內(nèi)置的JCE(Java加密擴(kuò)展)來實(shí)現(xiàn)的。Java開發(fā)工具集1.1為實(shí)現(xiàn)包括數(shù)字簽名和信息摘要在內(nèi)的加密功能,推出了一種基于供應(yīng)商的新型靈活應(yīng)用編程接口。Java密碼體系結(jié)構(gòu)支持供應(yīng)商的互操作,同時(shí)支持硬件和軟件實(shí)現(xiàn)。

            Java密碼學(xué)結(jié)構(gòu)設(shè)計(jì)遵循兩個(gè)原則:

            (1)算法的獨(dú)立性和可靠性。

            (2)實(shí)現(xiàn)的獨(dú)立性和相互作用性。

            算法的獨(dú)立性是通過定義密碼服務(wù)類來獲得。用戶只需了解密碼算法的概念,而不用去關(guān)心如何實(shí)現(xiàn)這些概念。實(shí)現(xiàn)的獨(dú)立性和相互作用性通過密碼服務(wù)提供器來實(shí)現(xiàn)。密碼服務(wù)提供器是實(shí)現(xiàn)一個(gè)或多個(gè)密碼服務(wù)的一個(gè)或多個(gè)程序包。軟件開發(fā)商根據(jù)一定接口,將各種算法實(shí)現(xiàn)后,打包成一個(gè)提供器,用戶可以安裝不同的提供器。安裝和配置提供器,可將包含提供器的ZIP和JAR文件放在CLASSPATH下,再編輯Java安全屬性文件來設(shè)置定義一個(gè)提供器。Java運(yùn)行環(huán)境Sun版本時(shí),?提供一個(gè)缺省的提供器Sun。

            下面介紹DES算法及如何利用DES算法加密和解密類文件的步驟。

            DES算法簡(jiǎn)介

            DES(Data?Encryption?Standard)是發(fā)明最早的最廣泛使用的分組對(duì)稱加密算法。DES算法的入口參數(shù)有三個(gè):Key、Data、Mode。其中Key為8個(gè)字節(jié)共64位,是DES算法的工作密鑰;Data也為8個(gè)字節(jié)64位,是要被加密或被解密的數(shù)據(jù);Mode為DES的工作方式,有兩種:加密或解密。

            DES算法工作流程如下:若Mode為加密模式,則利用Key?對(duì)數(shù)據(jù)Data進(jìn)行加密,?生成Data的密碼形式(64位)作為DES的輸出結(jié)果;如Mode為解密模式,則利用Key對(duì)密碼形式的數(shù)據(jù)Data進(jìn)行解密,還原為Data的明碼形式(64位)作為DES的輸出結(jié)果。在寫入和讀取的時(shí)候,使用一致的Key,在寫入時(shí)Key對(duì)核心數(shù)據(jù)進(jìn)行DES加密,然后存儲(chǔ)在數(shù)據(jù)庫中,數(shù)據(jù)要從數(shù)據(jù)庫取出時(shí),用同樣的Key對(duì)密碼數(shù)據(jù)進(jìn)行解密,便再現(xiàn)了明碼形式的核心數(shù)據(jù)。這樣,便保證了核心數(shù)據(jù)在數(shù)據(jù)庫存儲(chǔ)的安全性和可靠性。

          ????利用DES算法加密的步驟

            (1)生成一個(gè)安全密鑰。在加密或解密任何數(shù)據(jù)之前需要有一個(gè)密鑰。密鑰是隨同被加密的應(yīng)用程序一起發(fā)布的一段數(shù)據(jù),密鑰代碼如下所示。

            【生成一個(gè)密鑰代碼】
          ????//?生成一個(gè)可信任的隨機(jī)數(shù)源
          ????SecureRandom?sr?=?new?SecureRandom();
          ????//?為我們選擇的DES算法生成一個(gè)KeyGenerator對(duì)象
          ????KeyGenerator?kg?=?KeyGenerator.getInstance?("DES"?);
          ????Kg.init?(sr);
          ????//?生成密鑰
          ????Secret?Key?key?=?kg.generateKey();
          ????//?將密鑰數(shù)據(jù)保存為文件供以后使用,其中key?Filename為保存的文件名
          ????FileUtil.writeFile?(keyFilename,?key.getEncoded?()?);?

            (2)加密數(shù)據(jù)。得到密鑰之后,接下來就可以用它加密數(shù)據(jù)。如下所示。

            【用密鑰加密原始數(shù)據(jù)】

          ????//?產(chǎn)生一個(gè)可信任的隨機(jī)數(shù)源
          ????SecureRandom?sr?=?new?SecureRandom();
          ????//從密鑰文件key?Filename中得到密鑰數(shù)據(jù)
          ????Byte?rawKeyData?[]?=?FileUtil.readFile?(key?Filename);
          ????//?從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對(duì)象
          ????DESKeySpec?dks?=?new?DESKeySpec?(rawKeyData);
          ????//?創(chuàng)建一個(gè)密鑰工廠,然后用它把DESKeySpec轉(zhuǎn)換成Secret?Key對(duì)象
          ????SecretKeyFactory?key?Factory?=?SecretKeyFactory.getInstance("DES"?);
          ????Secret?Key?key?=?keyFactory.generateSecret(?dks?);
          ????//?Cipher對(duì)象實(shí)際完成加密操作
          ????Cipher?cipher?=?Cipher.getInstance(?"DES"?);
          ????//?用密鑰初始化Cipher對(duì)象
          ????cipher.init(?Cipher.ENCRYPT_MODE,?key,?sr?);
          ????//?獲取需要加密的數(shù)據(jù)str
          ????Byte?data?[]?=?str.getBytes();
          ????//?執(zhí)行加密操作
          ????Byte?encryptedClassData?[]?=?cipher.doFinal(data?);
          ????//?保存到數(shù)據(jù)庫中

            (3)解密數(shù)據(jù)。操作步驟如下所示。?

            【用密鑰解密數(shù)據(jù)】

          ????//?生成一個(gè)可信任的隨機(jī)數(shù)源
          ????SecureRandom?sr?=?new?SecureRandom();
          ????//?從密鑰文件中獲取原始密鑰數(shù)據(jù)
          ????Byte?rawKeyData[]?=?Util.readFile(?keyFilename?);
          ????//?創(chuàng)建一個(gè)DESKeySpec對(duì)象
          ????DESKeySpec?dks?=?new?DESKeySpec?(rawKeyData);
          ????//?創(chuàng)建一個(gè)密鑰工廠,然后用它把DESKeySpec對(duì)象轉(zhuǎn)換成Secret?Key對(duì)象?
          ????SecretKeyFactory?key?Factory?=?SecretKeyFactory.getInstance(?"DES"?);
          ????SecretKey?key?=?keyFactory.generateSecret(?dks?);
          ????//?Cipher對(duì)象實(shí)際完成解密操作
          ????Cipher?cipher?=?Cipher.getInstance(?"DES"?);
          ????//?用密鑰初始化Cipher對(duì)象
          ????Cipher.init(?Cipher.DECRYPT_MODE,?key,?sr?);
          ????//?從數(shù)據(jù)庫中獲得經(jīng)過加密的數(shù)據(jù)str
          ????Byte?encrypted?Data?[]?=?str.getBytes();
          ????//執(zhí)行解密操作
          ????Byte?decryptedData?[]?=?cipher.doFinal(?encryptedData?);
          ????//?然后將解密后的數(shù)據(jù)顯示給客戶。?


          ????我們需要開始在新系統(tǒng)里使用數(shù)據(jù)加密,如果不是在目前的系統(tǒng)里使用的話。我認(rèn)為這是項(xiàng)很大的工程,這也就是為什么我說在新系統(tǒng)里使用數(shù)據(jù)加密,而不是在舊系統(tǒng)里加上數(shù)據(jù)加密功能。最好方法就是從那些你最常使用的數(shù)據(jù)庫的提供廠商那里開始:Oracle、IBM和微軟。然后看看大量的第三方供應(yīng)商和其他互聯(lián)網(wǎng)安全專家能夠提供什么。無論你從哪里開始,最好都是今天開始,以免讓自己成為明天報(bào)紙的頭條新聞。

          posted on 2006-12-16 11:55 都市淘沙者 閱讀(981) 評(píng)論(0)  編輯  收藏 所屬分類: 加密解密/其他分類

          主站蜘蛛池模板: 玉林市| 衡南县| 兴文县| 全南县| 炉霍县| 布拖县| 招远市| 南汇区| 建平县| 拜城县| 宝山区| 马尔康县| 内乡县| 称多县| 民权县| 栾川县| 海阳市| 赤壁市| 恩施市| 毕节市| 平武县| 深水埗区| 车险| 五寨县| 翁牛特旗| 滦平县| 泾源县| 万盛区| 凌源市| 育儿| 永新县| 曲松县| 宁远县| 张家口市| 大宁县| 华安县| 仁寿县| 大名县| 上杭县| 化州市| 德江县|