<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)

    相冊

    搜索

    積分與排名

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费在线观看中文字幕| 国产乱弄免费视频| 亚洲AV日韩AV鸥美在线观看| 国产男女爽爽爽免费视频| 亚洲伊人久久综合影院| 一级一片免费视频播放| 国产乱辈通伦影片在线播放亚洲| 日本系列1页亚洲系列| mm1313亚洲精品国产| 丰满妇女做a级毛片免费观看| 中文字幕亚洲图片| 中文字幕无码免费久久| 亚洲国产美国国产综合一区二区| 亚洲第一网站免费视频| 国产成人精品日本亚洲网址| 特级淫片国产免费高清视频| 色吊丝免费观看网站| 国产亚洲3p无码一区二区| 18级成人毛片免费观看| 涩涩色中文综合亚洲| 亚洲AV无码乱码在线观看牲色| 一级做α爱过程免费视频| 亚洲AV无码久久精品成人| 桃子视频在线观看高清免费完整| 中文字幕无码精品亚洲资源网久久 | 久久免费精彩视频| 亚洲成a人片在线观看播放| 午夜男人一级毛片免费| 一级成人a免费视频| 亚洲尹人香蕉网在线视颅| 女人18毛片水最多免费观看| 一级一级一片免费高清| 亚洲成a人不卡在线观看| 免费一级毛片在线播放| 免费视频成人手机在线观看网址| 色老板亚洲视频免在线观| 亚洲国产精品自在拍在线播放| 午夜免费福利片观看| www亚洲精品久久久乳| 亚洲国产成人久久精品影视| 日韩视频免费一区二区三区|