SHA-1是一種數據加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉換成一段密文。
SHA-1 與 MD5 的比較
對密碼分析的安全性:由於MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。
速度:在相同的硬件上,SHA-1 的運行速度比 MD5 慢。
SignUtil.sha1(password) 對密碼進行sha1加密
public class SignUtil { private static final Logger LOG = LoggerFactory.getLogger(SignUtil.class); private static final String DEFAULT_CHARSET = "UTF-8"; private static final char[] DIGITS; public static String hmacSha256(String key, String data) { try { Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), mac.getAlgorithm()); mac.init(signingKey); return encodeHex(mac.doFinal(data.getBytes())); } catch (Exception e) { LOG.error("execute hmacSHA256 error",e); } return null; } public static String md5(String data, String charset) { try { byte[] msg = data.getBytes(charset); MessageDigest md = MessageDigest.getInstance("MD5"); return encodeHex(md.digest(msg)); } catch (Exception e) { LOG.error("execute MD5 error",e); } return null; } public static String sha256(String data, String charset) { try { byte[] msg = data.getBytes(charset); MessageDigest md = MessageDigest.getInstance("SHA-256"); return encodeHex(md.digest(msg)); } catch (Exception e) { LOG.error("execute SHA-256 error",e); } return null; } public static String sha1(String data, String charset) { try { byte[] msg = data.getBytes(charset); MessageDigest md = MessageDigest.getInstance("SHA1"); return encodeHex(md.digest(msg)); } catch (Exception e) { LOG.error("execute SHA1 error",e); } return null; } public static String sha1(String data) { return sha1(data, DEFAULT_CHARSET); } private static String encodeHex(byte[] data) { int l = data.length; char[] out = new char[l << 1]; int i = 0; for (int j = 0; i < l; ++i) { out[j++] = DIGITS[(240 & data[i]) >>> 4]; out[j++] = DIGITS[15 & data[i]]; } return new String(out); } static { DIGITS = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; } }