<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    由于DES不再安全,現在都流行使用AES加密算法替代DES,Rijndael是AES的實現。

    我從網上找到了很多Rijndael的java實現代碼,我用了其中的一個,并且寫了一個工具類,使得更方便使用它。

    http://www.cnblogs.com/Files/jobs/Rijndael.rar

    Rijndael_Util.java是我寫的,使用方法如下:

    import mit.Rijndael.Rijndael_Util;

    String strKey 
    = "欲練神功揮刀子宮";
    String plainText 
    = "葵花寶典";

    String cipherText 
    = Rijndael_Util.encode(strKey, plainText);
    System.
    out.println(cipherText);
    System.
    out.println(Rijndael_Util.decode(strKey, plainText);


     由于Rijindael的算法要求每次加密的數據必須是一個block,blockSize可以是16、24或者32。因此,當需要加密一個byte數組paintBytes時,如果byte數組plainBytes的長度不為blockSize的倍數,則需要補位。此時,就需要一個數值來保留明文byte數組的長度。最初我是用四個byte來保存plainBytes的長度,然后直接放在密文byte數組cipherBytes的最前面。但是我考慮到把直接把明文的長度暴露出來,不是很好,于是,就做了一個處理。

    當blockSize為16或者24時,而且plainBytes的長度不為blockSize的倍數,最后一個block的blockSize使用一個長度為blckSize+8的byte數組lastBlockBytes來保存,這樣,最后一個block的長度就比普通的block長8個byte,這個8個byte的前4位用來保存plainBytes的長度。

    當blockSize為32時,則最后一個block拆為兩個block,一個block的長度為16,一個block的長度為24,這樣一來,又有多余的8位來保存plainBytes的長度了。
    把int變為四個byte和把四個byte讀回一個int的實現如下:

    public final static void putInt(int val, byte[] bytes, int offSet) {
        bytes[offSet] 
    = (byte) (val >> 24);
        bytes[offSet 
    + 1= (byte) (val >> 16);
        bytes[offSet 
    + 2= (byte) (val >> 8);
        bytes[offSet 
    + 3= (byte) val;
    }

     

    public final static int getInt(byte[] bytes, int offSet) {
        
    return ((bytes[offSet + 0& 0xff<< 24
                
    | ((bytes[offSet + 1]) << 16)
                
    | ((bytes[offSet + 2& 0xff<< 8)
                
    | ((bytes[offSet + 3& 0xff<< 0);
    }

    .NET的朋友注意,java中的byte是帶符號,而c#中的byte是無符號的。

    以前,由于很少寫低級的代碼,所以對位運算不夠熟悉,最初是,把一個int拆成4個byte的算法自己寫,但是覺得不夠好,后來和flier_lu交流后,flier_lu建議我看java.nio中的ByteBuffer的實現,可能會有收獲。我查看后java.nio.Bytes類后,發現了java.nio.Bits的實現比我做的更好一些。java.nio.Bits是一個內部類,不是public,我們不能調用它,但是可以參考他的源碼實現。

    在這個過程中,我和以往的感覺一樣,一個基礎類庫,開放源碼對于使用者會有很大幫助。

    最近有人對.NET的前途提出質疑,有人說到關鍵點上來了:.NET是一個相當封閉的平臺。微軟對于公開基礎類庫的源碼,在走倒退的道路。以前微軟的基礎類庫MFC是可以查看源碼的,你甚至可以調試源碼,但是微軟提供.NET的基礎類庫而是不開放源代碼的,雖然你可以通過Reflectro或者Mono了解一些基礎類庫的源碼,但這個不能夠確定你通過這些途徑得到的源碼和你正在使用的是一致的。

    從.NET轉向Java快兩年了,越來越對Java的前途充滿希望,也很多人一樣,對微軟的.NET越來越失望。


    文章來源:http://www.cnblogs.com/jobs/archive/2005/03/20/122208.html
    posted on 2005-03-24 23:24 溫少的日志 閱讀(869) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
     
    主站蜘蛛池模板: 日本黄页网址在线看免费不卡| 91亚洲视频在线观看| 美女被艹免费视频| 拨牐拨牐x8免费| 亚洲精品国产摄像头| 日本视频免费在线| 国产精品亚洲综合天堂夜夜| 国产成人免费A在线视频| 国产成人精品久久亚洲高清不卡 | 日韩欧毛片免费视频| 亚洲午夜一区二区电影院| 国产精品免费观看久久| 亚洲AV无码专区国产乱码不卡| 国产免费卡一卡三卡乱码| 2022免费国产精品福利在线| 亚洲国产精品成人精品无码区| 在线观看免费视频一区| 久久亚洲精品无码aⅴ大香 | 最近免费字幕中文大全视频| 亚洲国产精品无码久久久| 永久免费看bbb| aa午夜免费剧场| 亚洲成a人片77777老司机| 国产v精品成人免费视频400条| 亚洲欧美aⅴ在线资源| 亚洲精品无码久久久| 男女午夜24式免费视频| 亚洲香蕉久久一区二区| 免费国产在线观看老王影院| a级成人毛片免费图片| 亚洲乱码一二三四区麻豆| 五月天婷亚洲天综合网精品偷| 国偷自产一区二区免费视频| 亚洲免费二区三区| heyzo亚洲精品日韩| 久久久久久一品道精品免费看| 亚洲中文字幕无码爆乳| 狠狠亚洲婷婷综合色香五月排名| 久久99国产乱子伦精品免费| 白白色免费在线视频| 911精品国产亚洲日本美国韩国|