# SHA256用处 SHA256算法用处: - 映射作用。将用户明文密码 加密后得到hash,将其保存到数据库,防止通过数据库查看明文密码 - 防篡改作用。对文件或者字符串进行加密,得到hash,如果文件或者字符串被篡改,则hash就不会和上次得到得hash相同了。 - 只要通过SHA256算法得到的结果都是128的字符串。 通过上述可以简单理解为:对“文件或者字符串"按照某种算法进行采样,使用又叫 摘要算法,即 对内容进行”‘概括“(即:128位的字符串),如果内容发生变化,通过 ”概括“就可以判断内容是否修改过。 ## maven依赖 ```xml 4.0.0 org.example test1 1.0-SNAPSHOT 8 8 commons-codec commons-codec 1.12 org.slf4j slf4j-api 1.7.32 ``` 代码工具类:(重载了 getSHA256() 和checkSHA256 ,可对字符串、文件 生成对应的hash值) ```java import org.apache.commons.codec.digest.DigestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class Sha256Utils { private static final Logger logger = LoggerFactory.getLogger(Sha256Utils.class); /** * 获取图片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) { logger.error("文件获取SHA256失败", e); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } 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 (sha256Hex.equals(SHA256)) { return true; } } catch (IOException e) { logger.error("SHA256检查文件完整性失败", e); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } 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.equals(sha256)?true:false; } //调用样例 public static void main(String[] args) throws IOException { File file = new File("C:\\Users\\wjw\\Desktop\\22.jpg"); String result = getSHA256(file); System.out.println(result); //校验文件是否被篡改 Boolean ss=checkSHA256(file,"27dd54736aed8a3bbec9c39712f2a6e864e5c29b252bca88e01e1222bb268419"); System.out.println(ss); String targetStr="1308302812048012821047"; String res =getSHA256(targetStr); System.out.println(res); Boolean aa=checkSHA256(targetStr,"9eff139ce1ac9baa5f1586cfbbf05cded99d49dbc54e13176426c1de2ec540f4"); System.out.println(aa); } } ```