栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SHA256 算法 加密文件、防文件篡改、文件校验

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SHA256 算法 加密文件、防文件篡改、文件校验

SHA256算法用处:(结合实际开发得心得如下,其他用处不知)

  • 映射作用。将用户明文密码 加密后得到hash,将其保存到数据库,防止通过数据库查看明文密码
  • 防篡改作用。对文件或者字符串进行加密,得到hash,如果文件或者字符串被篡改,则hash就不会和上次得到得hash相同了。
  • 只要通过SHA256算法得到的结果都是128的字符串。 

通过上述可以简单理解为:对“文件或者字符串"按照某种算法进行采样,使用又叫 摘要算法,即 对内容进行”‘概括“(即:128位的字符串),如果内容发生变化,通过 ”概括“就可以判断内容是否修改过。

代码实现:

maven依赖:



    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值)

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);

    
    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);
    }
    
    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;
    }

    
    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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345417.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号