SHA256 算法 加密文件、防文件篡改、文件校验
生活随笔
收集整理的這篇文章主要介紹了
SHA256 算法 加密文件、防文件篡改、文件校验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SHA256算法用處:(結合實際開發得心得如下,其他用處不知)
- 映射作用。將用戶明文密碼 加密后得到hash,將其保存到數據庫,防止通過數據庫查看明文密碼
- 防篡改作用。對文件或者字符串進行加密,得到hash,如果文件或者字符串被篡改,則hash就不會和上次得到得hash相同了。
- 只要通過SHA256算法得到的結果都是128的字符串。?
通過上述可以簡單理解為:對“文件或者字符串"按照某種算法進行采樣,使用又叫 摘要算法,即 對內容進行”‘概括“(即:128位的字符串),如果內容發生變化,通過 ”概括“就可以判斷內容是否修改過。
代碼實現:
maven依賴:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>test1</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></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 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);} }文章參考:Java文件完整性校驗SHA256_冒險的夢想家的博客~-CSDN博客
SHA256算法原理詳解_隨煜而安的專欄-CSDN博客_sha256
總結
以上是生活随笔為你收集整理的SHA256 算法 加密文件、防文件篡改、文件校验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编写Arduino支持的C++类库
- 下一篇: Servlet 文件上传