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

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

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

    隨筆-11  評論-5  文章-1  trackbacks-0
    package ?util.passwd;?

    import ?java.lang.reflect. * ;?
    /** ***********************************************?
    md5?類實現了RSA?Data?Security,?Inc.在提交給IETF?
    的RFC1321中的MD5?message-digest?算法。?
    ************************************************
    */
    ?

    /** ?
    *?
    *?<p>Title:?MD5加密</p>?
    *?<p>Description:?是MD5加密文件,能過getMD5ofStr方法對字符進行加密</p>?
    *?<p>Copyright:?Copyright?(c)?2003</p>?
    *?<p>Company:?</p>?
    *?
    @author ?<a?href="a-fei@sohu.com">a-fei</a>?
    *?
    @version ?1.0?
    *?@created?2003-03-26?
    */
    ?



    public ? class ?MD5? {?
    /* ?下面這些S11-S44實際上是一個4*4的矩陣,在原始的C實現中是用#define?實現的,?
    這里把它們實現成為static?final是表示了只讀,切能在同一個進程空間內的多個?
    Instance間共享
    */
    ?
    static ? final ? int ?S11? = ? 7 ;?
    static ? final ? int ?S12? = ? 12 ;?
    static ? final ? int ?S13? = ? 17 ;?
    static ? final ? int ?S14? = ? 22 ;?

    static ? final ? int ?S21? = ? 5 ;?
    static ? final ? int ?S22? = ? 9 ;?
    static ? final ? int ?S23? = ? 14 ;?
    static ? final ? int ?S24? = ? 20 ;?

    static ? final ? int ?S31? = ? 4 ;?
    static ? final ? int ?S32? = ? 11 ;?
    static ? final ? int ?S33? = ? 16 ;?
    static ? final ? int ?S34? = ? 23 ;?

    static ? final ? int ?S41? = ? 6 ;?
    static ? final ? int ?S42? = ? 10 ;?
    static ? final ? int ?S43? = ? 15 ;?
    static ? final ? int ?S44? = ? 21 ;?

    static ? final ? byte []?PADDING? = ? {? - 128 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,?
    0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,?
    0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,?
    0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ,? 0 ?}
    ;?
    /* ?下面的三個成員是MD5計算過程中用到的3個核心數據,在原始的C實現中?
    被定義到MD5_CTX結構中?

    */
    ?
    private ? long []?state? = ? new ? long [ 4 ];? // ?state?(ABCD)?
    private ? long []?count? = ? new ? long [ 2 ];? // ?number?of?bits,?modulo?2^64?(lsb?first)?
    private ? byte []?buffer? = ? new ? byte [ 64 ];? // ?input?buffer?

    /* ?digestHexStr是MD5的唯一一個公共成員,是最新一次計算結果的?
     ?16進制ASCII表示.?
    */
    ?
    public ?String?digestHexStr;?

    /* ?digest,是最新一次計算結果的2進制內部表示,表示128bit的MD5值.?
    */
    ?
    private ? byte []?digest? = ? new ? byte [ 16 ];?

    /* ?
    getMD5ofStr是類MD5最主要的公共方法,入口參數是你想要進行MD5變換的字符串?
    返回的是變換完的結果,這個結果是從公共成員digestHexStr取得的.?
    */
    ?
    public ?String?getMD5ofStr(String?inbuf)? {?
    md5Init();?
    md5Update(inbuf.getBytes(),?inbuf.length());?
    md5Final();?
    digestHexStr?
    = ? "" ;?
    for ?( int ?i? = ? 0 ;?i? < ? 16 ;?i ++ )? {?
    digestHexStr?
    += ?byteHEX(digest[i]);?
    }
    ?
    return ?digestHexStr;?

    }
    ?
    // ?這是MD5這個類的標準構造函數,JavaBean要求有一個public的并且沒有參數的構造函數?
    public ?MD5()? {?
    md5Init();?

    return ;?
    }
    ?



    /* ?md5Init是一個初始化函數,初始化核心變量,裝入標準的幻數? */ ?
    private ? void ?md5Init()? {?
    count[
    0 ]? = ? 0L ;?
    count[
    1 ]? = ? 0L ;?
    // /*?Load?magic?initialization?constants.?

    state[
    0 ]? = ? 0x67452301L ;?
    state[
    1 ]? = ? 0xefcdab89L ;?
    state[
    2 ]? = ? 0x98badcfeL ;?
    state[
    3 ]? = ? 0x10325476L ;?

    return ;?
    }
    ?
    /* ?F,?G,?H?,I?是4個基本的MD5函數,在原始的MD5的C實現中,由于它們是?
    簡單的位運算,可能出于效率的考慮把它們實現成了宏,在java中,我們把它們?
      實現成了private方法,名字保持了原來C中的。?
    */
    ?

    private ? long ?F( long ?x,? long ?y,? long ?z)? {?
    return ?(x? & ?y)? | ?(( ~ x)? & ?z);?

    }
    ?
    private ? long ?G( long ?x,? long ?y,? long ?z)? {?
    return ?(x? & ?z)? | ?(y? & ?( ~ z));?

    }
    ?
    private ? long ?H( long ?x,? long ?y,? long ?z)? {?
    return ?x? ^ ?y? ^ ?z;?
    }
    ?

    private ? long ?I( long ?x,? long ?y,? long ?z)? {?
    return ?y? ^ ?(x? | ?( ~ z));?
    }
    ?

    /* ?
    FF,GG,HH和II將調用F,G,H,I進行近一步變換?
    FF,?GG,?HH,?and?II?transformations?for?rounds?1,?2,?3,?and?4.?
    Rotation?is?separate?from?addition?to?prevent?recomputation.?
    */
    ?

    private ? long ?FF( long ?a,? long ?b,? long ?c,? long ?d,? long ?x,? long ?s,?
    long ?ac)? {?
    a?
    += ?F?(b,?c,?d)? + ?x? + ?ac;?
    a?
    = ?(( int )?a? << ?s)? | ?(( int )?a? >>> ?( 32 ? - ?s));?
    a?
    += ?b;?
    return ?a;?
    }
    ?

    private ? long ?GG( long ?a,? long ?b,? long ?c,? long ?d,? long ?x,? long ?s,?
    long ?ac)? {?
    a?
    += ?G?(b,?c,?d)? + ?x? + ?ac;?
    a?
    = ?(( int )?a? << ?s)? | ?(( int )?a? >>> ?( 32 ? - ?s));?
    a?
    += ?b;?
    return ?a;?
    }
    ?
    private ? long ?HH( long ?a,? long ?b,? long ?c,? long ?d,? long ?x,? long ?s,?
    long ?ac)? {?
    a?
    += ?H?(b,?c,?d)? + ?x? + ?ac;?
    a?
    = ?(( int )?a? << ?s)? | ?(( int )?a? >>> ?( 32 ? - ?s));?
    a?
    += ?b;?
    return ?a;?
    }
    ?
    private ? long ?II( long ?a,? long ?b,? long ?c,? long ?d,? long ?x,? long ?s,?
    long ?ac)? {?
    a?
    += ?I?(b,?c,?d)? + ?x? + ?ac;?
    a?
    = ?(( int )?a? << ?s)? | ?(( int )?a? >>> ?( 32 ? - ?s));?
    a?
    += ?b;?
    return ?a;?
    }
    ?
    /* ?
    md5Update是MD5的主計算過程,inbuf是要變換的字節串,inputlen是長度,這個?
    函數由getMD5ofStr調用,調用之前需要調用md5init,因此把它設計成private的?
    */
    ?
    private ? void ?md5Update( byte []?inbuf,? int ?inputLen)? {?

    int ?i,?index,?partLen;?
    byte []?block? = ? new ? byte [ 64 ];?
    index?
    = ?( int )(count[ 0 ]? >>> ? 3 )? & ? 0x3F ;?
    // ?/*?Update?number?of?bits?*/?
    if ?((count[ 0 ]? += ?(inputLen? << ? 3 ))? < ?(inputLen? << ? 3 ))?
    count[
    1 ] ++ ;?
    count[
    1 ]? += ?(inputLen? >>> ? 29 );?

    partLen?
    = ? 64 ? - ?index;?

    // ?Transform?as?many?times?as?possible.?
    if ?(inputLen? >= ?partLen)? {?
    md5Memcpy(buffer,?inbuf,?index,?
    0 ,?partLen);?
    md5Transform(buffer);?

    for ?(i? = ?partLen;?i? + ? 63 ? < ?inputLen;?i? += ? 64 )? {?

    md5Memcpy(block,?inbuf,?
    0 ,?i,? 64 );?
    md5Transform?(block);?
    }
    ?
    index?
    = ? 0 ;?

    }
    ? else ?

    i?
    = ? 0 ;?

    // /*?Buffer?remaining?input?*/?
    md5Memcpy(buffer,?inbuf,?index,?i,?inputLen? - ?i);?

    }
    ?

    /* ?
    md5Final整理和填寫輸出結果?
    */
    ?
    private ? void ?md5Final?()? {?
    byte []?bits? = ? new ? byte [ 8 ];?
    int ?index,?padLen;?

    // /*?Save?number?of?bits?*/?
    Encode?(bits,?count,? 8 );?

    // /*?Pad?out?to?56?mod?64.?
    index? = ?( int )(count[ 0 ]? >>> ? 3 )? & ? 0x3f ;?
    padLen?
    = ?(index? < ? 56 )? ? ?( 56 ? - ?index)?:?( 120 ? - ?index);?
    md5Update?(PADDING,?padLen);?

    // /*?Append?length?(before?padding)?*/?
    md5Update(bits,? 8 );?

    // /*?Store?state?in?digest?*/?
    Encode?(digest,?state,? 16 );?

    }
    ?

    /* ?md5Memcpy是一個內部使用的byte數組的塊拷貝函數,從input的inpos開始把len長度的?
         ?字節拷貝到output的outpos位置開始?
    */
    ?

    private ? void ?md5Memcpy?( byte []?output,? byte []?input,?
    int ?outpos,? int ?inpos,? int ?len)?
    {?
    int ?i;?

    for ?(i? = ? 0 ;?i? < ?len;?i ++ )?
    output[outpos?
    + ?i]? = ?input[inpos? + ?i];?
    }
    ?

    /* ?
    md5Transform是MD5核心變換程序,有md5Update調用,block是分塊的原始字節?
    */
    ?
    private ? void ?md5Transform?( byte ?block[])? {?
    long ?a? = ?state[ 0 ],?b? = ?state[ 1 ],?c? = ?state[ 2 ],?d? = ?state[ 3 ];?
    long []?x? = ? new ? long [ 16 ];?

    Decode?(x,?block,?
    64 );?

    /* ?Round?1? */ ?
    a?
    = ?FF?(a,?b,?c,?d,?x[ 0 ],?S11,? 0xd76aa478L );? /* ?1? */ ?
    d?
    = ?FF?(d,?a,?b,?c,?x[ 1 ],?S12,? 0xe8c7b756L );? /* ?2? */ ?
    c?
    = ?FF?(c,?d,?a,?b,?x[ 2 ],?S13,? 0x242070dbL );? /* ?3? */ ?
    b?
    = ?FF?(b,?c,?d,?a,?x[ 3 ],?S14,? 0xc1bdceeeL );? /* ?4? */ ?
    a?
    = ?FF?(a,?b,?c,?d,?x[ 4 ],?S11,? 0xf57c0fafL );? /* ?5? */ ?
    d?
    = ?FF?(d,?a,?b,?c,?x[ 5 ],?S12,? 0x4787c62aL );? /* ?6? */ ?
    c?
    = ?FF?(c,?d,?a,?b,?x[ 6 ],?S13,? 0xa8304613L );? /* ?7? */ ?
    b?
    = ?FF?(b,?c,?d,?a,?x[ 7 ],?S14,? 0xfd469501L );? /* ?8? */ ?
    a?
    = ?FF?(a,?b,?c,?d,?x[ 8 ],?S11,? 0x698098d8L );? /* ?9? */ ?
    d?
    = ?FF?(d,?a,?b,?c,?x[ 9 ],?S12,? 0x8b44f7afL );? /* ?10? */ ?
    c?
    = ?FF?(c,?d,?a,?b,?x[ 10 ],?S13,? 0xffff5bb1L );? /* ?11? */ ?
    b?
    = ?FF?(b,?c,?d,?a,?x[ 11 ],?S14,? 0x895cd7beL );? /* ?12? */ ?
    a?
    = ?FF?(a,?b,?c,?d,?x[ 12 ],?S11,? 0x6b901122L );? /* ?13? */ ?
    d?
    = ?FF?(d,?a,?b,?c,?x[ 13 ],?S12,? 0xfd987193L );? /* ?14? */ ?
    c?
    = ?FF?(c,?d,?a,?b,?x[ 14 ],?S13,? 0xa679438eL );? /* ?15? */ ?
    b?
    = ?FF?(b,?c,?d,?a,?x[ 15 ],?S14,? 0x49b40821L );? /* ?16? */ ?

    /* ?Round?2? */ ?
    a?
    = ?GG?(a,?b,?c,?d,?x[ 1 ],?S21,? 0xf61e2562L );? /* ?17? */ ?
    d?
    = ?GG?(d,?a,?b,?c,?x[ 6 ],?S22,? 0xc040b340L );? /* ?18? */ ?
    c?
    = ?GG?(c,?d,?a,?b,?x[ 11 ],?S23,? 0x265e5a51L );? /* ?19? */ ?
    b?
    = ?GG?(b,?c,?d,?a,?x[ 0 ],?S24,? 0xe9b6c7aaL );? /* ?20? */ ?
    a?
    = ?GG?(a,?b,?c,?d,?x[ 5 ],?S21,? 0xd62f105dL );? /* ?21? */ ?
    d?
    = ?GG?(d,?a,?b,?c,?x[ 10 ],?S22,? 0x2441453L );? /* ?22? */ ?
    c?
    = ?GG?(c,?d,?a,?b,?x[ 15 ],?S23,? 0xd8a1e681L );? /* ?23? */ ?
    b?
    = ?GG?(b,?c,?d,?a,?x[ 4 ],?S24,? 0xe7d3fbc8L );? /* ?24? */ ?
    a?
    = ?GG?(a,?b,?c,?d,?x[ 9 ],?S21,? 0x21e1cde6L );? /* ?25? */ ?
    d?
    = ?GG?(d,?a,?b,?c,?x[ 14 ],?S22,? 0xc33707d6L );? /* ?26? */ ?
    c?
    = ?GG?(c,?d,?a,?b,?x[ 3 ],?S23,? 0xf4d50d87L );? /* ?27? */ ?
    b?
    = ?GG?(b,?c,?d,?a,?x[ 8 ],?S24,? 0x455a14edL );? /* ?28? */ ?
    a?
    = ?GG?(a,?b,?c,?d,?x[ 13 ],?S21,? 0xa9e3e905L );? /* ?29? */ ?
    d?
    = ?GG?(d,?a,?b,?c,?x[ 2 ],?S22,? 0xfcefa3f8L );? /* ?30? */ ?
    c?
    = ?GG?(c,?d,?a,?b,?x[ 7 ],?S23,? 0x676f02d9L );? /* ?31? */ ?
    b?
    = ?GG?(b,?c,?d,?a,?x[ 12 ],?S24,? 0x8d2a4c8aL );? /* ?32? */ ?

    /* ?Round?3? */ ?
    a?
    = ?HH?(a,?b,?c,?d,?x[ 5 ],?S31,? 0xfffa3942L );? /* ?33? */ ?
    d?
    = ?HH?(d,?a,?b,?c,?x[ 8 ],?S32,? 0x8771f681L );? /* ?34? */ ?
    c?
    = ?HH?(c,?d,?a,?b,?x[ 11 ],?S33,? 0x6d9d6122L );? /* ?35? */ ?
    b?
    = ?HH?(b,?c,?d,?a,?x[ 14 ],?S34,? 0xfde5380cL );? /* ?36? */ ?
    a?
    = ?HH?(a,?b,?c,?d,?x[ 1 ],?S31,? 0xa4beea44L );? /* ?37? */ ?
    d?
    = ?HH?(d,?a,?b,?c,?x[ 4 ],?S32,? 0x4bdecfa9L );? /* ?38? */ ?
    c?
    = ?HH?(c,?d,?a,?b,?x[ 7 ],?S33,? 0xf6bb4b60L );? /* ?39? */ ?
    b?
    = ?HH?(b,?c,?d,?a,?x[ 10 ],?S34,? 0xbebfbc70L );? /* ?40? */ ?
    a?
    = ?HH?(a,?b,?c,?d,?x[ 13 ],?S31,? 0x289b7ec6L );? /* ?41? */ ?
    d?
    = ?HH?(d,?a,?b,?c,?x[ 0 ],?S32,? 0xeaa127faL );? /* ?42? */ ?
    c?
    = ?HH?(c,?d,?a,?b,?x[ 3 ],?S33,? 0xd4ef3085L );? /* ?43? */ ?
    b?
    = ?HH?(b,?c,?d,?a,?x[ 6 ],?S34,? 0x4881d05L );? /* ?44? */ ?
    a?
    = ?HH?(a,?b,?c,?d,?x[ 9 ],?S31,? 0xd9d4d039L );? /* ?45? */ ?
    d?
    = ?HH?(d,?a,?b,?c,?x[ 12 ],?S32,? 0xe6db99e5L );? /* ?46? */ ?
    c?
    = ?HH?(c,?d,?a,?b,?x[ 15 ],?S33,? 0x1fa27cf8L );? /* ?47? */ ?
    b?
    = ?HH?(b,?c,?d,?a,?x[ 2 ],?S34,? 0xc4ac5665L );? /* ?48? */ ?

    /* ?Round?4? */ ?
    a?
    = ?II?(a,?b,?c,?d,?x[ 0 ],?S41,? 0xf4292244L );? /* ?49? */ ?
    d?
    = ?II?(d,?a,?b,?c,?x[ 7 ],?S42,? 0x432aff97L );? /* ?50? */ ?
    c?
    = ?II?(c,?d,?a,?b,?x[ 14 ],?S43,? 0xab9423a7L );? /* ?51? */ ?
    b?
    = ?II?(b,?c,?d,?a,?x[ 5 ],?S44,? 0xfc93a039L );? /* ?52? */ ?
    a?
    = ?II?(a,?b,?c,?d,?x[ 12 ],?S41,? 0x655b59c3L );? /* ?53? */ ?
    d?
    = ?II?(d,?a,?b,?c,?x[ 3 ],?S42,? 0x8f0ccc92L );? /* ?54? */ ?
    c?
    = ?II?(c,?d,?a,?b,?x[ 10 ],?S43,? 0xffeff47dL );? /* ?55? */ ?
    b?
    = ?II?(b,?c,?d,?a,?x[ 1 ],?S44,? 0x85845dd1L );? /* ?56? */ ?
    a?
    = ?II?(a,?b,?c,?d,?x[ 8 ],?S41,? 0x6fa87e4fL );? /* ?57? */ ?
    d?
    = ?II?(d,?a,?b,?c,?x[ 15 ],?S42,? 0xfe2ce6e0L );? /* ?58? */ ?
    c?
    = ?II?(c,?d,?a,?b,?x[ 6 ],?S43,? 0xa3014314L );? /* ?59? */ ?
    b?
    = ?II?(b,?c,?d,?a,?x[ 13 ],?S44,? 0x4e0811a1L );? /* ?60? */ ?
    a?
    = ?II?(a,?b,?c,?d,?x[ 4 ],?S41,? 0xf7537e82L );? /* ?61? */ ?
    d?
    = ?II?(d,?a,?b,?c,?x[ 11 ],?S42,? 0xbd3af235L );? /* ?62? */ ?
    c?
    = ?II?(c,?d,?a,?b,?x[ 2 ],?S43,? 0x2ad7d2bbL );? /* ?63? */ ?
    b?
    = ?II?(b,?c,?d,?a,?x[ 9 ],?S44,? 0xeb86d391L );? /* ?64? */ ?

    state[
    0 ]? += ?a;?
    state[
    1 ]? += ?b;?
    state[
    2 ]? += ?c;?
    state[
    3 ]? += ?d;?

    }
    ?

    /* Encode把long數組按順序拆成byte數組,因為java的long類型是64bit的,?
    只拆低32bit,以適應原始C實現的用途?
    */
    ?
    private ? void ?Encode?( byte []?output,? long []?input,? int ?len)? {?
    int ?i,?j;?

    for ?(i? = ? 0 ,?j? = ? 0 ;?j? < ?len;?i ++ ,?j? += ? 4 )? {?
    output[j]?
    = ?( byte )(input[i]? & ? 0xffL );?
    output[j?
    + ? 1 ]? = ?( byte )((input[i]? >>> ? 8 )? & ? 0xffL );?
    output[j?
    + ? 2 ]? = ?( byte )((input[i]? >>> ? 16 )? & ? 0xffL );?
    output[j?
    + ? 3 ]? = ?( byte )((input[i]? >>> ? 24 )? & ? 0xffL );?
    }
    ?
    }
    ?

    /* Decode把byte數組按順序合成成long數組,因為java的long類型是64bit的,?
    只合成低32bit,高32bit清零,以適應原始C實現的用途?
    */
    ?
    private ? void ?Decode?( long []?output,? byte []?input,? int ?len)? {?
    int ?i,?j;?


    for ?(i? = ? 0 ,?j? = ? 0 ;?j? < ?len;?i ++ ,?j? += ? 4 )?
    output[i]?
    = ?b2iu(input[j])? | ?
    (b2iu(input[j?
    + ? 1 ])? << ? 8 )? | ?
    (b2iu(input[j?
    + ? 2 ])? << ? 16 )? | ?
    (b2iu(input[j?
    + ? 3 ])? << ? 24 );?

    return ;?
    }
    ?

    /* ?
    b2iu是我寫的一個把byte按照不考慮正負號的原則的"升位"程序,因為java沒有unsigned運算?
    */
    ?
    public ? static ? long ?b2iu( byte ?b)? {?
    return ?b? < ? 0 ? ? ?b? & ? 0x7F ? + ? 128 ?:?b;?
    }
    ?

    /* byteHEX(),用來把一個byte類型的數轉換成十六進制的ASCII表示,?
     因為java中的byte的toString無法實現這一點,我們又沒有C語言中的?
    sprintf(outbuf,"%02X",ib)?
    */
    ?
    public ? static ?String?byteHEX( byte ?ib)? {?
    char []?Digit? = ? {?′ 0 ′,′ 1 ′,′ 2 ′,′ 3 ′,′ 4 ′,′ 5 ′,′ 6 ′,′ 7 ′,′ 8 ′,′ 9 ′,?
    ′A′,′B′,′C′,′D′,′E′,′F′?}
    ;?
    char ?[]?ob? = ? new ? char [ 2 ];?
    ob[
    0 ]? = ?Digit[(ib? >>> ? 4 )? & ? 0X0F ];?
    ob[
    1 ]? = ?Digit[ib? & ? 0X0F ];?
    String?s?
    = ? new ?String(ob);?
    return ?s;?
    }
    ?

    public ? static ? void ?main(String?args[])? {?


    MD5?m?
    = ? new ?MD5();?
    if ?(Array.getLength(args)? == ? 0 )? {? // 如果沒有參數,執行標準的Test?Suite?

    System.out.println(
    " MD5?Test?suite: " );?
    System.out.println(
    " MD5(\ " \ " ): " + m.getMD5ofStr( "" ));?
    System.out.println(
    " MD5(\ " a\ " ): " + m.getMD5ofStr( " a " ));?
    System.out.println(
    " MD5(\ " abc\ " ): " + m.getMD5ofStr( " abc " ));?
    System.out.println(
    " MD5(\ " message?digest\ " ): " + m.getMD5ofStr( " message?digest " ));?
    System.out.println(
    " MD5(\ " abcdefghijklmnopqrstuvwxyz\ " ): " + ?
    m.getMD5ofStr(
    " abcdefghijklmnopqrstuvwxyz " ));?
    System.out.println(
    " MD5(\ " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\ " ): " + ?
    m.getMD5ofStr(
    " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " ));?
    }
    ?
    else ?
    System.out.println(
    " MD5( " ? + ?args[ 0 ]? + ? " )= " ? + ?m.getMD5ofStr(args[ 0 ]));?


    }
    ?

    }
    ?
    posted on 2006-10-14 15:58 Crespo 閱讀(1119) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 成人性做爰aaa片免费看| 伊人久久亚洲综合影院首页| 亚洲中文字幕无码不卡电影| 可以免费观看的一级毛片| 国产免费69成人精品视频| 破了亲妺妺的处免费视频国产| 女人18毛片免费观看| 在线观看免费毛片| 国产又粗又长又硬免费视频 | 亚洲色中文字幕在线播放| 亚洲中文字幕久久精品无码VA| 亚洲国产日韩视频观看| 国产精品亚洲专区在线观看 | 亚洲成A人片在线观看无码不卡| 久久被窝电影亚洲爽爽爽| 亚洲狠狠久久综合一区77777| 亚洲激情电影在线| 国产亚洲精品成人AA片| 丰满亚洲大尺度无码无码专线| 香蕉97碰碰视频免费| 国产精品永久免费| 久久免费看少妇高潮V片特黄| 久久精品免费一区二区| 成全影视免费观看大全二| 免费国产综合视频在线看| 久久久久国产成人精品亚洲午夜| 亚洲精品国产精品乱码不99 | 亚洲人成电影网站国产精品| 亚洲老妈激情一区二区三区| 亚洲色四在线视频观看| 亚洲色精品VR一区区三区| 国产精品久久久久久亚洲小说| 三年片免费高清版 | 99视频在线精品免费| 无码人妻久久一区二区三区免费丨| 成人a视频片在线观看免费| 亚洲国产一区二区三区| 亚洲国产高清在线| 亚洲av永久无码天堂网| 免费国产叼嘿视频大全网站| 国产桃色在线成免费视频|