amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks
          Bouncy Castle(http://www.bouncycastle.org/)是一個龐大的加密類庫,支持Java和C#,其中Java部分發布的源代碼壓縮包就有24M左右,支持JDK 1.0~5.0,支持J2ME(現在叫JavaME)。
          但是,這個類庫使用起來并不那么方便,它并沒有與普通Java類庫那樣以Jar形式發布立即可用的二進制類庫,而只發布源代碼,源代碼包含了多份,包括JDK1.0,JDK1.1,JDK1.2,JDK1.3,JDK1.4,JDK1.5,J2ME等,每種環境都有少量文件不一樣,有多個用于Ant的build xml,分別用于各種不同的JDK,但是每個xml定義了多個target,不知道哪個target才能build出可用的類庫來,選中了其中某個target有可能會出現錯誤,build不下去。文檔太簡單,基本沒講到怎么生成可用的類庫,網上的相關文檔也很少。我嘗試了兩天才終于把第一個MIDP加密測試程序運行成功。
          我的應用只是實現Java ME的加密,所以這里講的只是針對JavaME的,JavaSE應該會簡單一點。

          打開下載下來的壓縮包(crypto-138.zip),會發現里面有一堆文件夾和一堆文件,其中一個文件夾叫j2me,于是第一反應就是打開它看看里面是什么,發現里面只有少量的源代碼文件,看來這只是適用于j2me的一部分源代碼而已,其他通用的部分不在這里。
          還有一個j2me.xml,是一個Ant的build文件,在eclipse里面用ant打開以后,發現里面有很多target,除了what(輸出一些信息)和init(建立幾個目錄,復制一些文件)這兩個能執行成功之外,其他幾乎都是失敗的,所以通過這個東西是搞不出我們可用的classes來的。
          沒辦法,只有一個個目錄地看,在一個zips目錄里面發現cldc_sources.zip,里面的源代碼文件有很多,有點像了,于是就把它解壓后放到一個Eclipse ME測試項目的src目錄下,找到org.bouncycastle.crypto.examples包,里面有個MIDPTest.java文件,還有個midp_test.jad,看來這個是用來測試用的MIDP了,調出WTK的模擬器來運行一下,果然是,成功了。
          下一步是在手機上運行。如果不混淆,生成的JAR包有1.6M之巨,不管了,先試一下。安裝到手機上,到最后出現“授權失敗”的提示,安裝不成功。記起原來找文檔時在index.html里面看到有這么一句話:The final caveat to this is that as the j2me distribution includes some compatibility classes starting in the java package, you need to use an obfuscator to change the package names before attempting to import a midlet using the BC API. 似乎因為用于j2me的版本有幾個以java開頭的包,里面包含了一些兼容類,可能是用于補充CLDC的不足,由于java開頭的包是系統包,是不允許修改的,所以不處理過的話安裝會失敗。必須先用混淆器弄一下才行。Eclipse ME配置混淆器十分簡單,我使用的是ProGuard。參照http://www.cnjm.net/eclipseme/docs/configuring.html配置即可。然后運行Create Obfuscated Package生成混淆過的包,只有13K。安裝在Nokia 6681上,成功,運行,也成功了。嘗試修改一下MIDPTest.java,在whichCipher方法里面,把返回值改為其他數字(0-4),就可以修改加密方式,但是由于DES加密使用的密鑰長度為64bit,而默認的key是"0123456789abcdef0123456789abcdef",運行DES是會提示密鑰太長,我開始以為把key改為4個字符就可以(因為Java使用Unicode,每個字符2字節,4個字符8字節=64bit),卻出現了數組越界的異常,其實這個key并不是直接用作密鑰,還要經過處理的。嘗試了8個字符也不行,最后發現16個字符就可以了,應該是每兩個字符對應一個16進制數。測試程序是對“www.bouncycastle.org”這個字符串進行加密和解密,速度還是挺快的,幾乎感覺不到需要時間(在手機上啟動Java程序本來就比較慢)。

          中間還碰到一個問題,由于我是把源代碼直接復制到一個原來建立好的MIDP項目里,那個MIDP項目里已經有個默認的JAD文件,但是里面沒有表示要運行的Midlet,生成Jar包之后,安裝到手機上到最后會出現安裝文件無效的提示。打開那個JAD文件,在Midlets標簽里點擊Add按鈕,把org.bouncycastle.crypto.examples.MIDPTest添加進去即可。

          以上測試使用的環境是:
          JDK 1.5.02
          Eclipse 3.2.0
          Eclipse ME 1.7.7 http://eclipseme.org
          Sun WTK 2.5.2 for CLDC
          ProGuard 4.1 http://proguard.sourceforge.net/



          剛剛發現Bouncy Castle的下載頁面http://www.bouncycastle.org/latest_releases.html里面有專用于J2ME的源代碼發行包,里面只包含用于J2ME的代碼,如果僅用在J2ME下的話,這個應該比較簡單,不用找半天。
          posted on 2008-01-25 19:59 amp@java 閱讀(1448) 評論(1)  編輯  收藏 所屬分類: Java ME

          評論

          # re: 可用在JavaME上的加密包Bouncy Castle的使用 2009-09-02 13:16 LorenLuo
          你好 我想請教一下關于bouncycastle的用法,要是愿意請加我的:qq 276539211  回復  更多評論
            

          主站蜘蛛池模板: 都兰县| 巴林左旗| 蓝山县| 北海市| 娄烦县| 赤壁市| 汝城县| 仪陇县| 留坝县| 九龙县| 来凤县| 洪洞县| 蒲城县| 邵阳县| 东平县| 新乡市| 虎林市| 香格里拉县| 新平| 德安县| 托克托县| 洞口县| 阜新市| 大悟县| 卓尼县| 常熟市| 邻水| 阿图什市| 兴化市| 清丰县| 黄平县| 贵定县| 汉中市| 会同县| 富顺县| 夹江县| 山东省| 万安县| 繁峙县| 华宁县| 来凤县|