SHA1加密算法(java实现)
SHA1加密算法
SHA是⼀种数据加密算法,该算法经过加密专家多年来的发展和改进已⽇益完善,现在已成为公认的最安全的散列算法之⼀,并被⼴泛使⽤。该算法的思想是接收⼀段明⽂,然后以⼀种不可逆的⽅式将它转换成⼀段(通常更⼩)密⽂,也可以简单的理解为取⼀串输⼊码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明⽂的⼀种“指纹”或是“摘要”,所以对散列值的数字签名就可以视为对此明⽂的数字签名。
安全散列算法SHA(Secure Hash Algorithm,SHA)是美国国家标准技术研究所发布的国家标准FIPS PUB 180,最新的标准已经于2008年更新到FIPS PUB 180-3。其中规定了SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512这⼏种单向散列算法。SHA-1,SHA-224和SHA-256适⽤于长度不超过2^64⼆进制位的消息。SHA-384和SHA-512适⽤于长度不超过2^128⼆进制位的消息。
算法原理
SHA-1是⼀种数据加密算法,该算法的思想是接收⼀段明⽂,然后以⼀种不可逆的⽅式将它转换成⼀段(通常更⼩)密⽂,也可以简单的理解为取⼀串输⼊码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。
单向散列函数的安全性在于其产⽣散列值的操作过程具有较强的单向性。如果在输⼊序列中嵌⼊密码,那么任何⼈在不知道密码的情况下都不能产⽣正确的散列值,从⽽保证了其安全性。SHA将输⼊流按照每块512位(64个字节)进⾏分块,并产⽣20个字节的被称为信息认证代码或信息摘要的输出。
该算法输⼊报⽂的长度不限,产⽣的输出是⼀个160位的报⽂摘要。输⼊是按512 位的分组进⾏处理的。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。
通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明⽂通过⼀种函数运算(Hash)转换成报⽂摘要(不同的明⽂对应不同的报⽂摘要),报⽂摘要加密后与明⽂⼀起传送给接受⽅,接受⽅将接受的明⽂产⽣新的报⽂摘要与发送⽅的发来报⽂摘要解密⽐较,⽐较结果⼀致表⽰明⽂未被改动,如果不⼀致表⽰明⽂已被篡改。
算法Java实现
public class SecuritySHA1Utils {
/**
* @Comment SHA1实现
* @Author Ron
* @Date 2017年9⽉13⽇下午3:30:36
* @return
*/
public static String shaEncode(String inStr) throws Exception {
MessageDigest sha = null;
try {
sha = Instance("SHA");
} catch (Exception e) {
System.out.String());
e.printStackTrace();
return "";
}
byte[] byteArray = Bytes("UTF-8");
byte[] md5Bytes = sha.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.HexString(val));
}
String();
java技术专家
}
public static void main(String args[]) throws Exception {
String str = new String("amigoxiexiexingxing");
System.out.println("原始:" + str);
System.out.println("SHA后:" + shaEncode(str));
}
}
但是在实际的应⽤中,我们可以直接引⼊dec.digest.DigestUtils,然后按照如下⽅法调⽤加密即可。
/**
* @Comment SHA1加密密码
* @Author Ron
* @Date 2017年9⽉12⽇下午2:46:31
* @return
*/
public static String encodePassword(String psw) {
if(StringUtils.isEmpty(psw)){
return null;
}else{
return DigestUtils.sha1Hex(psw);
}
}
原⽂地址:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。