<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

    /**
    ?*????單項(xiàng)函數(shù)(消息摘要)工具類?
    ?*?
    @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進(jìn)制編碼,返回32個(gè)字符
    ?????
    */
    ????
    public ? static ?String?MD5(String?input)
    ????{
    ?????????Digest??digest?
    = ? new ?MD5Digest();
    ?????????
    ????????
    // 正確的值應(yīng)該為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));

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

    ????
    /**
    ?????*?SHA1散列算法
    ?????*?
    @param ?input??輸入是任意字符串
    ?????*?
    @return ??SHA輸出160bit,?經(jīng)過16進(jìn)制編碼,輸出40個(gè)字符
    ?????
    */
    ????
    public ? static ?String?SHA1(String?input)
    ????{
    ?????????Digest??digest?
    = ? new ?SHA1Digest();
    ?????????
    ????????
    // 正確的值應(yīng)該為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));

    ????????
    // 返回的輸出應(yīng)該是含有40個(gè)字符的字符串,每個(gè)字符代表一個(gè)16進(jìn)制(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不規(guī)范,默認(rèn)選擇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 閱讀(2221) 評論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(110)

    我參與的團(tuán)隊(duì)

    隨筆分類(126)

    隨筆檔案(155)

    文章分類(9)

    文章檔案(19)

    相冊

    搜索

    積分與排名

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲成人黄色网址| 波多野结衣免费在线观看| 亚洲熟妇无码AV| 亚洲韩国—中文字幕| 亚洲综合色在线观看亚洲| 日韩高清在线免费看| 四虎成年永久免费网站| 免费视频成人手机在线观看网址| 国产偷国产偷亚洲高清在线| 亚洲五月综合缴情婷婷| 亚洲欧洲在线播放| 亚洲精品视频在线观看免费| 亚洲熟妇无码乱子AV电影| 亚洲av无码不卡私人影院| 精品国产免费观看一区| 免费人成在线视频| 成人免费午夜无码视频| 黄色永久免费网站| 毛片免费全部播放无码| 一区二区三区观看免费中文视频在线播放 | 久久精品国产99精品国产亚洲性色| 69式国产真人免费视频| 99re在线这里只有精品免费| 青青操在线免费观看| 男女一边摸一边做爽的免费视频| 人与动性xxxxx免费| 成年大片免费视频播放一级| 免费无码午夜福利片| 阿v视频免费在线观看| 美女视频黄.免费网址| 国产亚洲视频在线观看网址 | 国产男女性潮高清免费网站| 在线视频免费观看www动漫| 最近的中文字幕大全免费版| 成年人免费视频观看| 免费观看的av毛片的网站| 国产伦一区二区三区免费| 亚洲 无码 在线 专区| 亚洲日韩涩涩成人午夜私人影院| 国产性爱在线观看亚洲黄色一级片| 亚洲另类少妇17p|