SHA256算法用处:(结合实际开发得心得如下,其他用处不知)
- 映射作用。将用户明文密码 加密后得到hash,将其保存到数据库,防止通过数据库查看明文密码
- 防篡改作用。对文件或者字符串进行加密,得到hash,如果文件或者字符串被篡改,则hash就不会和上次得到得hash相同了。
- 只要通过SHA256算法得到的结果都是128的字符串。
通过上述可以简单理解为:对“文件或者字符串"按照某种算法进行采样,使用又叫 摘要算法,即 对内容进行”‘概括“(即:128位的字符串),如果内容发生变化,通过 ”概括“就可以判断内容是否修改过。
代码实现:
maven依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="http:///2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.">
<modelVersion>4.0.0</modelVersion>
<groupId></groupId>
<artifactId>test1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<>8</>
<>8</>
</properties>
<dependencies>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
</dependencies>
</project>
代码工具类:(重载了 getSHA256() 和checkSHA256 ,可对字符串、文件 生成对应的hash值)
import ;
import org.;
import org.;
import ;
import ;
import ;
public class Sha256Utils {
private static final Logger logger = ();
/**
* 获取图片SHA256
*
* @param file
* @return
*/
private static String getSHA256(File file) {
String sha256Hex = null;
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
sha256Hex = DigestUtils.sha256Hex(inputStream);
return sha256Hex;
} catch (IOException e) {
("文件获取SHA256失败", e);
} finally {
if (inputStream != null) {
try {
();
} catch (IOException e) {
();
}
}
}
return null;
}
public static String checkStrSHA256(String str,String SHA256){
return DigestUtils.sha256Hex(str);
}
/**
* 检查图片的SHA256 是否正确
*
* @param file 文件
* @param SHA256 SHA256结果值
* @return
*/
private static boolean checkSHA256(File file, String SHA256) {
String sha256Hex = null;
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
sha256Hex = DigestUtils.sha256Hex(inputStream);
if ((SHA256)) {
return true;
}
} catch (IOException e) {
("SHA256检查文件完整性失败", e);
} finally {
if (inputStream != null) {
try {
();
} catch (IOException e) {
();
}
}
}
return false;
}
/**
*
* @param str 字符串
* @return 返回加密后的字符串
*/
public static String getSHA256(String str){
return DigestUtils.sha256Hex(str);
}
private static boolean checkSHA256(String targetStr, String SHA256) {
String sha256 = getSHA256(targetStr);
return (sha256)?true:false;
}
//调用样例
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\wjw\\Desktop\\");
String result = getSHA256(file);
(result);
//校验文件是否被篡改
Boolean ss=checkSHA256(file,"27dd54736aed8a3bbec9c39712f2a6e864e5c29b252bca88e01e1222bb268419");
(ss);
String targetStr="1308302812048012821047";
String res =getSHA256(targetStr);
(res);
Boolean aa=checkSHA256(targetStr,"9eff139ce1ac9baa5f1586cfbbf05cded99d49dbc54e13176426c1de2ec540f4");
(aa);
}
}
文章参考:Java文件完整性校验SHA256_冒险的梦想家的博客~-****博客
SHA256算法原理详解_随煜而安的专栏-****博客_sha256