<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)  編輯  收藏

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


    網站導航:
     
     
    主站蜘蛛池模板: 免费人成网站7777视频| 四虎永久在线观看免费网站网址| 国产精品嫩草影院免费| 亚洲国产精品久久久久秋霞小 | 99视频在线免费| 亚洲av片劲爆在线观看| a成人毛片免费观看| 亚洲精品国产成人片| 免费毛片a线观看| 67pao强力打造67194在线午夜亚洲| 成人久久免费网站| 亚洲乱亚洲乱淫久久| 1024免费福利永久观看网站| 亚洲人成网站日本片| 色吊丝最新永久免费观看网站| 大桥未久亚洲无av码在线| 国产在线19禁免费观看| 日本高清不卡中文字幕免费| 中文字幕亚洲一区二区三区 | 免费观看激色视频网站bd | 水蜜桃亚洲一二三四在线| 永久免费在线观看视频| 精品国产成人亚洲午夜福利| 免费国产美女爽到喷出水来视频| 成年大片免费高清在线看黄| 国产亚洲精品一品区99热| 亚洲电影在线免费观看| 亚洲乱码日产精品一二三| 久久精品国产亚洲7777| 最近免费2019中文字幕大全| 亚洲精品乱码久久久久久蜜桃图片| 免费一级特黄特色大片在线观看| 国产男女爽爽爽免费视频 | 最近中文字幕免费mv在线视频| 99久久国产亚洲综合精品| 亚洲国产精品激情在线观看| 国产精品免费大片| 最新亚洲人成无码网www电影| 国产精品久久久亚洲| 成人免费无遮挡无码黄漫视频| h视频免费高清在线观看|