SHA算法
1、什么是SHA算法
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是联邦信息处理标准(Federal Information Processing Standards,FIPS)所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。
2、SHA算法发展史
2.1 SHA-0
SHA由美国标准与技术研究所(NIST)设计并于1993年发表,该版本称为SHA-0,很快被发现存在安全隐患。
2.2 SHA-1
由于SHA-0中存在的安全隐患,SHA由美国标准与技术研究所(NIST)设计并于1995年发表SHA-1,2005年 SHA-1 算法被破解。
SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。
但SHA-1的安全性如今被密码学家严重质疑。
2.3 SHA-2
NIST在2002年发布了三个额外的SHA变体,这三个函数都将讯息对应到更长的讯息摘要。以它们的摘要长度(以位元计算)加在原名后面来命名:SHA-256,SHA-384和SHA-512。2004年2月加入了一个额外的变种SHA-224",这是为了符合双金钥3DES所需的金钥长度而定义。
至今尚未出现对SHA-2有效的攻击。
3、 SHA 算法对比
image.png
4、SHA 算法实现
4.1 JDK 实现
package lzf.cipher.jdk;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @author Java 小工匠
*/
public class JdkShaUtils {
// SHA 与 SHA-1 算法等价
public static String sha(byte[] bytes) {
return shaBase("SHA", bytes);
}
// SHA-1 算法
public static String sha1(byte[] bytes) {
return shaBase("SHA-1", bytes);
}
// SHA-256 算法
public static String sha256(byte[] bytes) {
return shaBase("SHA-256", bytes);
}