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

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

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

    David.Turing's blog

     

    DigestUtils for MD5, SHA, RIPEMD

    /**
    ?*????單項函數(消息摘要)工具類?
    ?*?
    @author ??david.turing
    ?*?@copyright?GuangZhou?BEA?Usergroup
    ?*?
    @version ?0.7
    ?
    */
    package ?org.dev2dev.security.crypto.digest;


    import ?java.io.File;
    import ?java.io.FileNotFoundException;
    import ?java.security.MessageDigest;

    import ?org.bouncycastle.crypto.Digest;
    import ?org.bouncycastle.crypto.digests.MD5Digest;
    import ?org.bouncycastle.crypto.digests.RIPEMD128Digest;
    import ?org.bouncycastle.crypto.digests.RIPEMD160Digest;
    import ?org.bouncycastle.crypto.digests.RIPEMD256Digest;
    import ?org.bouncycastle.crypto.digests.RIPEMD320Digest;
    import ?org.bouncycastle.crypto.digests.SHA1Digest;
    import ?org.bouncycastle.util.encoders.Hex;
    import ?org.dev2dev.common.FileUtils;



    public ? class ?DigestUtils?{
    ????
    ????
    /**
    ?????*?MD5散列算法
    ?????*?
    @param ?input??任意長度字符串
    ?????*?
    @return ?MD5輸出128bit,字符串通過16進制編碼,返回32個字符
    ?????
    */
    ????
    public ? static ?String?MD5(String?input)
    ????{
    ?????????Digest??digest?
    = ? new ?MD5Digest();
    ?????????
    ????????
    // 正確的值應該為16,即128位
    ????????System.out.println( " Digest?Size?= " + digest.getDigestSize() + " [bytes]? " );
    ?????????
    ????????
    byte []?resBuf = new ? byte [digest.getDigestSize()];
    ????????
    ????????String??resStr;
    ????????
    byte []??bytes? = ? new ? byte [input.getBytes().length];
    ????????bytes
    = input.getBytes();

    ????????digest.update(bytes,?
    0 ,?bytes.length);???????
    ????????
    ????????digest.doFinal(resBuf,?
    0 );
    ????????
    ????????resStr?
    = ? new ?String(Hex.encode(resBuf));

    ????????
    // 返回的輸出應該是含有32個字符的字符串,每個字符代表一個16進制(4bit),
    ????????
    // 32*4bit=128bit
    ???????? return ?resStr;
    ????????
    ????}

    ????
    /**
    ?????*?SHA1散列算法
    ?????*?
    @param ?input??輸入是任意字符串
    ?????*?
    @return ??SHA輸出160bit,?經過16進制編碼,輸出40個字符
    ?????
    */
    ????
    public ? static ?String?SHA1(String?input)
    ????{
    ?????????Digest??digest?
    = ? new ?SHA1Digest();
    ?????????
    ????????
    // 正確的值應該為20,即160位
    ????????System.out.println( " Digest?Size?= " + digest.getDigestSize() + " [bytes]? " );
    ????????
    ????????
    byte []?resBuf = new ? byte [digest.getDigestSize()];
    ????????
    ????????String??resStr;
    ????????
    byte []??bytes? = ? new ? byte [input.getBytes().length];
    ????????bytes
    = input.getBytes();

    ????????digest.update(bytes,?
    0 ,?bytes.length);???????
    ????????
    ????????digest.doFinal(resBuf,?
    0 );
    ????????
    ????????resStr?
    = ? new ?String(Hex.encode(resBuf));

    ????????
    // 返回的輸出應該是含有40個字符的字符串,每個字符代表一個16進制(4bit),
    ????????
    // 40*4bit=160bit
    ???????? return ?resStr;
    ????????
    ????}

    ????
    /**
    ?????*?RIPEMD能選擇不同的摘要長度
    ?????*?128b,?160b,?256b,?320b四種
    ?????*?
    ?????*?
    @param ?input
    ?????*?
    @param ?digestSize
    ?????*?
    @return
    ?????
    */
    ????
    public ? static ?String?RIPEMD(String?input,? int ?digestSize)
    ????{
    ????????Digest?digest
    = null ;
    ????????
    switch ?(digestSize)?{
    ????????
    case ? 128 :
    ????????????digest
    = new ?RIPEMD128Digest();
    ????????????
    break ;
    ????????
    case ? 160 :
    ????????????digest
    = new ?RIPEMD160Digest();
    ????????????
    break ;
    ????????
    case ? 256 :
    ????????????digest
    = new ?RIPEMD256Digest();
    ????????????
    break ;
    ????????
    case ? 320 :
    ????????????digest
    = new ?RIPEMD320Digest();
    ????????????
    break ;
    ????????
    default :
    ????????????
    // 如果指定的digestSize不規范,默認選擇128
    ????????????digest = new ?RIPEMD128Digest();
    ????????????
    break ;????????
    ????????}
    ?????????????????????
    ????????System.out.println(
    " Digest?Size= " + digest.getDigestSize() + " [bytes]? " );
    ????????
    ????????
    byte []?resBuf = new ? byte [digest.getDigestSize()];
    ????????
    ????????String??resStr;
    ????????
    byte []??bytes? = ? new ? byte [input.getBytes().length];
    ????????bytes
    = input.getBytes();

    ????????digest.update(bytes,?
    0 ,?bytes.length);???????
    ????????
    ????????digest.doFinal(resBuf,?
    0 );
    ????????
    ????????resStr?
    = ? new ?String(Hex.encode(resBuf));

    ????????
    return ?resStr;
    ????????
    ????}
    ????
    ????
    ????
    public ? static ? byte []?digestFile(String?filename,?String?digestType)
    ????{
    ????????File?infile
    = new ?File(filename);

    ????????
    byte []?sign_input? = ? null ;
    ????????
    byte []??inbytes = null ;
    ????????
    ????????
    try ?{
    ????????????MessageDigest?digester?
    = ?MessageDigest.getInstance(digestType);?? // MD5,?SHA1?
    ????????????inbytes? = ?FileUtils.getBytesFromFile(infile);

    ????????????digester.update(inbytes);
    ????????????sign_input
    = digester.digest(inbytes);
    ????????????
    ????????}?
    catch ?(FileNotFoundException?fnf)?{
    ????????????System.err.println(
    " 輸入文件沒有找到?[ " ? + ?infile? + ? " ] " );
    ????????????System.exit(
    1 );
    ????????}
    catch (Exception?e)
    ????????{
    ????????????e.printStackTrace();
    ????????}
    ????????
    ????????
    return ?sign_input;
    ????}
    ????

    }

    posted on 2006-11-17 22:23 david.turing 閱讀(2216) 評論(0)  編輯  收藏


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


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿(110)

    我參與的團隊

    隨筆分類(126)

    隨筆檔案(155)

    文章分類(9)

    文章檔案(19)

    相冊

    搜索

    積分與排名

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 四虎国产精品免费永久在线| 美女黄色毛片免费看| 99久久精品免费视频| 亚洲va久久久噜噜噜久久天堂| 一个人免费播放在线视频看片| 一本色道久久88亚洲综合| 国产精品亚洲综合天堂夜夜| 免费国产a国产片高清| 国产亚洲视频在线观看| 亚洲国产综合精品一区在线播放| 日韩精品视频在线观看免费| 亚洲不卡无码av中文字幕| 久久一区二区免费播放| 亚洲国产AV无码专区亚洲AV| 色www永久免费| 亚洲日韩乱码中文无码蜜桃| 少妇高潮太爽了在线观看免费| 亚洲色大成网站WWW国产| 日韩免费视频播放| 一区二区三区AV高清免费波多| 国产亚洲人成网站观看| 2021在线永久免费视频| 亚洲日本久久久午夜精品| 国产yw855.c免费视频| APP在线免费观看视频| 亚洲国产成人久久| 暖暖日本免费在线视频| 免费看内射乌克兰女| 午夜影视日本亚洲欧洲精品一区| 成人浮力影院免费看| 精品特级一级毛片免费观看| 亚洲精品无码久久千人斩| 黄色永久免费网站| 污网站免费在线观看| 亚洲综合精品香蕉久久网97| 岛国av无码免费无禁网站| a一级爱做片免费| 亚洲欧洲日产国码二区首页| 免费观看亚洲人成网站| 日韩在线不卡免费视频一区| 亚洲国产一区二区三区在线观看 |