为了账号安全,请及时绑定邮箱和手机立即绑定

Java实现SHA1加密与MD5 明文32加密

标签:
Java

MD5 和SHA-1 是目前使用比较广泛的散列(Hash)函数,也是在消息认证和数字签名中普遍使用的两种加密算法。本文基于AVR 高速嵌入式单片机,实现了MD5和SHA-1 两种加密算法的比较,并对算法进行了汇编语言的优化和改进。根据实验结果,对两种算法的优缺点进行了比较和分析。

由于MD5 与SHA-1均是从MD4 发展而来,它们的结构和强度等特性有很多相似之处,表(1)是对MD5 与SHA-1 的结构比较。SHA-1与MD5 的最大区别在于其摘要比MD5 摘要长 32 比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5 是2128 数量级的操作,SHA-1 是2160 数量级的操作。产生具有相同摘要的两个报文的难度:MD5是 264 是数量级的操作,SHA-1 是280 数量级的操作。因而,SHA-1 对强行攻击的强度更大。但由于SHA-1 的循环步骤比MD5 多(80:64)且要处理的缓存大(160 比特:128 比特),SHA-1 的运行速度比MD5 慢。
/*

  • @param plainText
  • 明文
  • @return 32位密文
    */
    public String encryption(String plainText ) {
    String re_md5 = new String();
    try {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update( plainText.getBytes());
    byte b [] = md .digest();

             int i ;
    
             StringBuffer buf = new StringBuffer();
             for (int offset = 0; offset < b .length ; offset++) {
                 i = b[ offset];
                 if (i < 0)
                     i += 256;
                 if (i < 16)
                     buf.append( "0");
                 buf.append(Integer. toHexString(i));
             }
    
             re_md5 = buf.toString();
    
         } catch (NoSuchAlgorithmException e ) {
             e.printStackTrace();
         }
         return re_md5 ;
     }
     /**
  • SHA加密
  • @param str
  • @return
    */
    public String getSha1(String str ) {
    if (str == null || str.length() == 0) {
    return null ;
    }
    char hexDigits [] = { '0' , '1' , '2' , '3' , '4', '5' , '6' , '7' , '8' , '9' ,
    'a', 'b', 'c', 'd', 'e', 'f' };

           try {
               MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
                mdTemp.update( str.getBytes( "UTF-8"));
    
                byte[] md = mdTemp .digest();
                int j = md .length ;
                char buf [] = new char[ j * 2];
                int k = 0;
                for (int i = 0; i < j ; i ++) {
                     byte byte0 = md [i ];
                     buf[ k++] = hexDigits[byte0 >>> 4 & 0xf];
                     buf[ k++] = hexDigits[byte0 & 0xf];
               }
                return new String(buf );
          } catch (Exception e ) {
                return null ;
          }
      }
点击查看更多内容
27人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
15
获赞与收藏
97

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消