国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java加密擴(kuò)展基礎(chǔ)

2019-11-18 11:51:03
字體:
供稿:網(wǎng)友

  java加密擴(kuò)展(JCE)現(xiàn)在已經(jīng)成為Java SDK 1.4的核心組成部分。JCE基本上是一組提供加密框架和實現(xiàn)、密鑰生成和協(xié)商以及消息認(rèn)證代碼(MAC)算法的Java包。
  不過你可得注重了,雖然JCE目前是Java SDK 1.4核心組成包,不過我們將演示如何用Java SDK 1.2 或者更高版本對其進(jìn)行配置。此外,本文還要討論如何在動態(tài)安裝的情況下使用安全供給者。最后我會演示創(chuàng)建密鑰和密碼的過程,以及如何實施基本的數(shù)據(jù)加密和解密。
  什么是安全供給者?
  安全供給者就是承擔(dān)特定安全機(jī)制的實現(xiàn)。有些供給者是完全免費的,而另一些供給者則需要付費。提供安全供給者的公司有IBM、Bouncy Castle和RSA等。今后我們將對Bouncy Castle的RSA實現(xiàn)做闡述。Sun 提供了如何實現(xiàn)你自己供給者的細(xì)節(jié)。
  靜態(tài)安裝
  在使用或安裝JCE之前,你必須首先從Sun的網(wǎng)站獲取相關(guān)的Java庫。JCE包含了Sun自產(chǎn)的安全供給者SunJCE。為了在你的默認(rèn)供給者列表中靜態(tài)添加SunJCE,你需要編輯安全屬性文件;
  <java-home>/jre/lib/security/java.security (Win32)

  <java-home>/jre/lib/security/java.security (UNIX)

  比方說,假如你在Windows計算機(jī)的C:/jdk1.3文件夾下面安裝了JDK,那么你需要編輯如下文件:
  C:/jdk1.3/jre/lib/security/java.security
  為了安裝SunJCE你還得在以上文件中添加以下代碼行:
  security.PRovider.n=com.sun.crypto.provider.SunJCE
  請用正確的供給者替代以上代碼中的 n。
  程序清單A 演示了如何查看安裝供給者的信息。程序清單B所示的輸出結(jié)果顯示了供給者的支持信息,比如可用算法等。
  動態(tài)安裝
  程序清單C 所示為運行時動態(tài)裝載供給者的情況。必須指出,當(dāng)你在調(diào)用Security.addProvider(…)的時候,供給者對整個JVM可用。
  如上所述,當(dāng)你在安裝供給者的時候,你必須提供一個數(shù)字表示其優(yōu)先級。在調(diào)用實現(xiàn)時, JVM會根據(jù)優(yōu)先級搜索整個安裝的安全供給者并用找到的第1個供給者實現(xiàn)請求的算法。你還可以通過在方法調(diào)用中包含其他參數(shù)的方法顯式地調(diào)用給定的供給者,以后我們可以了解這一點。
  實現(xiàn)細(xì)節(jié)
  JCE API由很多類和接口組成。它們具有若干種算法和安全特性。本文首先討論常用的對稱算法數(shù)據(jù)加密標(biāo)準(zhǔn)DES(Data Encryption Standard)。
  產(chǎn)生密鑰
  程序清單D 說明了如何初始化KeyGenerator和產(chǎn)生密鑰。
  為了生成密鑰,我們首先得獲得KeyGenerator的一個實例。這可以由調(diào)用KeyGenerator類的靜態(tài)方法getInstance完成。我們用普通的、不帶模式或者方案的DES算法。可選地,你可以如下所示傳遞參數(shù):
  DES/ECB/PKCS5Padding
  這樣就提供了帶ECB(電子密碼本)模式和PKCS#5補(bǔ)充風(fēng)格的DES算法。你還可以傳遞第2個字符串參數(shù)指定要使用的供給者實現(xiàn),不過這并不是必需的:
  KeyGenerator kg = KeyGenerator.getInstance("DES";
  獲得自己的KeyGenerator,之后就可以調(diào)用generateKey方法獲得我們的密鑰:
  Key key = kg.generateKey();
  產(chǎn)生密碼
  我們采用生成密鑰相同的方式生成一個密碼。我們必須調(diào)用Cipher類的靜態(tài)方法getInstance。該方法的參數(shù)同KeyGenerator完全一樣:
  Cipher cipher = Cipher.getInstance(“DES”);
  程序清單E 顯示了有關(guān)的操作程序。
  數(shù)據(jù)加密和解密
  加密是在字節(jié)級別上進(jìn)行的,所以數(shù)據(jù)的各個方面一個不落全都會被加密。一旦獲得了密鑰和密碼,你就可以對數(shù)據(jù)進(jìn)行安全操作了。值得注重的是密鑰和密碼必須采用同類算法。你不能用DESede初始化密鑰卻用DES初始化密碼。Cipher對象采用同樣的方法對數(shù)據(jù)加密和解密,所以你必須首先對其初始化以便它知道對數(shù)據(jù)進(jìn)行怎樣的操作:
  cipher.init(Cā??ipher.ENCRYPT_MODE, key);
  以上方法調(diào)用對Cipher對象初始化以預(yù)備加密數(shù)據(jù)。加密數(shù)據(jù)的最簡單辦法就是調(diào)用 Cipher對象的doFinal方法,同時傳遞字節(jié)數(shù)組:
  byte[] data = “Hello World!”.getBytes();
  byte[] result = cipher.doFinal(data);
  result現(xiàn)在包含傳遞數(shù)據(jù)的加密形式。對同一數(shù)據(jù)解密也很輕易。但在解密之前,我們必須重新初始化Cipher對象以便其預(yù)備解密:
  cipher.init(Cipher.DECRYPT_MODE, key);
  之后即可解密:
  byte[] original = cipher.doFinal(result);
  現(xiàn)在original應(yīng)該和data.完全相同。程序清單F所示為全部源代碼。
  小結(jié)
  JCE是一種強(qiáng)大的API,它可以實施多種類型的加密和其他涉及安全的任務(wù)。我們已經(jīng)知道了如何以靜態(tài)和動態(tài)方式安裝JCE,以及采用對稱加密算法對簡單消息加密和解密。在本系列的第2部分,我還會利用以上的這些知識運用到真實環(huán)境下來,教你如何編寫簡單的封裝類以結(jié)合套接字加密應(yīng)用程序的所有網(wǎng)絡(luò)流量。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 清远市| 封开县| 瓦房店市| 齐河县| 濮阳县| 澄迈县| 紫金县| 通榆县| 高台县| 方正县| 满城县| 寻乌县| 承德市| 黄大仙区| 会宁县| 黄梅县| 招远市| 托克托县| 当雄县| 滨海县| 金堂县| 观塘区| 卢龙县| 东明县| 南乐县| 平阳县| 大同市| 色达县| 玛沁县| 丹棱县| 萍乡市| 胶州市| 满洲里市| 崇州市| 扬州市| 韶山市| 汝州市| 汝州市| 苍南县| 藁城市| 迭部县|