sha1/md5 代码

来源:互联网 发布:linux 交叉编译ide 编辑:程序博客网 时间:2024/05/16 12:23

算法太难,我就不求甚解了,工作中的小白,这种代码拿来直接用就可以了

sha1加密

public class SHA1 {    public static String getSha1(String str) {        if (null == str || 0 == str.length()) {            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;        }    }}

*

怀疑代码可用性的话,用本工具随便加密一段文字去百度一下sha1在线加密,两边结果做一下对比,就知道这段代码是不是真的sha1加密代码了

*
md5加密

public class Md5 {    public static String toMD5(String inStr) {        StringBuffer sb = new StringBuffer();        try {            MessageDigest md = MessageDigest.getInstance("MD5");            md.update(inStr.getBytes());            byte b[] = md.digest();            int i;            for (int offset = 0; offset < b.length; offset++) {                i = b[offset];                if (i < 0)                    i += 256;                if (i < 16)                    sb.append("0");                sb.append(Integer.toHexString(i));            }        } catch (Exception e) {            return null;            //          e.printStackTrace();        }        return sb.toString().toUpperCase();    }}

SHA-1与MD5的比较

因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
l 对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
l 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
l 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。

SHA-1停止计划
2005年,密码学家就证明SHA-1的破解速度比预期提高了2000倍,虽然破解仍然是极其困难和昂贵的,但随着计算机变得越来越快和越来越廉价,SHA-1算法的安全性也逐年降低,已被密码学家严重质疑,希望由安全强度更高的SHA-2替代它。
微软第一个宣布了SHA-1弃用计划,对于SSL证书和代码签名证书,微软设定了不同的替换时间表:
  1、所有Windows受信任的根证书颁发机构(CA)从2016年1月1日起必须停止签发新的SHA-1签名算法SSL证书和代码签名证书;
  2、对于SSL证书,Windows将于2017年1月1日起停止支持SHA1证书。也就是说:任何在之前签发的SHA-1证书必须替换成SHA-2证书;
  3、对于代码签名证书,Windows将于2016年1月1日停止接受没有时间戳的SHA-1签名的代码和SHA-1证书。也就是说,Windows仍然接受在2016年1月1日之前使用SAH-1签名的已经加上RFC3161时间戳的代码,直到微软认为有可能出现SHA-1攻击时。

  Google官方博客宣布,将在Chrome浏览器中逐渐降低SHA-1证书的安全指示,逐步停止对使用SHA-1散列算法证书的支持。近日,Chrome 39新版本 PC 端发布,在部分操作系统下,该版本浏览器中已开始出现“该网站使用的安全设置已过期” 提示,在接下来的6个月内会变得越来越严格。最终,使用了有效期至2016年的SHA-1证书的站点可能会被给予黄色警告。

  Mozilla也做了同样的决定,在其对外公布近期更新计划中表示:“现在依然有不少网站使用基于 SHA-1签名的 SSL证书,所以我们决定加入微软和谷歌的阵营,认为应在 2016 年 1 月 1 日前停止发放 SHA-1 证书,在 2017 年 1 月1 日后不再信任此证书。”
引用自:http://baike.baidu.com/link?url=2-U-XWbyBtqR-YN55yYStgsZ-DGZCPruw1bK0KWqEOHFlfeRkbOcfsgI8_wHDmF4rUkBoNUQlWd9dLEnWW9gQq

**

还有一点是吾等小白容易困惑的地方,sha1和md5的结果到底是是大写还是小写?
其实没多大区别,想大写就大写,想小写就小写

**

sha1和MD5的算法可以修改么?
有人也曾经提出对加密算法中的函数或者变量进行修改,从而加强在使用原算法的安全,但是这种方法修改了原函数或者变量后,无法验证修改后算法在强度上是否跟原算法一致。(意思就是说在不修改整体算法的前提下,在算法外面还是可以加一点自己的东西的)

劳驾点个赞呗

1 0
原创粉丝点击