Java实现SHA1加密代码实例

Java实现SHA1加密代码实例

什么是SHA1加密

SHA1 (Secure Hash Algorithm 1)是一种被广泛使用的密码散列函数,经常用于数据验证和加密技术中。SHA1将任意大小的数据(输入)映射到固定大小的数据(输出),通常为160位的二进制值。SHA1加密算法在现代密码学里面被广泛应用,SHA1计算出来的摘要信息是不可逆的。

怎么用Java实现SHA1加密

Java提供了MessageDigest类用于实现SHA1加密操作。

主要步骤如下:

  1. 获取MessageDigest实例
  2. 将需要加密的数据传入MessageDigest实例
  3. 调用MessageDigest的digest()方法获取计算得到的摘要信息
  4. 将计算得到的摘要信息转成16进制或者64进制字符串形式

代码示例

示例1:SHA1加密字符串

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Sha1Util {

    public static String sha1(String str) {
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("SHA-1");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        md.update(str.getBytes());
        byte[] digest = md.digest();

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < digest.length; i++) {
            int b = digest[i] & 0xff;
            if (b < 0x10) {
                sb.append('0');
            }
            sb.append(Integer.toHexString(b));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        String str = "hello world";
        String sha1Str = sha1(str);
        System.out.println(sha1Str);
    }
}

输出结果:

2ef7bde608ce5404e97d5f042f95f89f1c232871

示例2:SHA1加密文件

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class FileSha1Util {

    public static String sha1(File file) {
        MessageDigest md = null;
        DigestInputStream dis = null;
        try {
            md = MessageDigest.getInstance("SHA-1");
            dis = new DigestInputStream(new FileInputStream(file), md);

            byte[] buffer = new byte[1024 * 1024];
            while (dis.read(buffer) > 0) ;

            byte[] digest = md.digest();

            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < digest.length; i++) {
                int b = digest[i] & 0xff;
                if (b < 0x10) {
                    sb.append('0');
                }
                sb.append(Integer.toHexString(b));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (dis != null) {
                    dis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    public static void main(String[] args) {
        File file = new File("test.txt");
        String sha1Str = sha1(file);
        System.out.println(sha1Str);
    }
}

输出结果:

c9b468d884d18ad7707741a6f9b0b16fdf33d527

总结

通过上面的示例代码,我们可以看到,使用Java实现SHA1加密是非常简单的。只需要使用MessageDigest类进行实例化,并调用相应的方法即可得到SHA1加密后的结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现SHA1加密代码实例 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 贪心算法原理及在Java中的使用

    贪心算法原理及在Java中的使用 原理概述 贪心算法(Greedy Algorithm),又称贪婪算法、贪心思想,是一种基于贪心策略进行求解的算法。它在每一步都选择当前状态下最优的解,从而获得全局最优的解。贪心算法需要满足“贪心选择性质”和“最优子结构性质”。其中,“贪心选择性质”是指每一步的贪心选择都能导致全局最优解,而“最优子结构性质”则是指问题的最优解…

    Java 2023年5月26日
    00
  • java实现的AES加密算法完整实例

    下面是“Java实现的AES加密算法完整实例”的完整攻略: 一、概述 AES(Advanced Encryption Standard)是一种常用的对称加密算法,之前常用的DES算法已经不再安全。在Java中,可以通过javax.crypto包中的AES算法实现加密和解密。 二、实现步骤 生成AES密钥 KeyGenerator kgen = KeyGene…

    Java 2023年5月19日
    00
  • Spring动态加载bean后调用实现方法解析

    全文内容如下: 什么是Spring动态加载bean? Spring动态加载bean可以理解为在运行时通过编写代码动态地向Spring容器中添加新的bean。相比于静态配置文件中声明bean,动态添加bean更加灵活方便。 怎么实现Spring动态加载bean后调用实现方法解析? 步骤一:定义抽象实现方法 首先我们需要定义一个抽象方法,让后续动态添加的bean…

    Java 2023年5月19日
    00
  • Java ArrayList源码深入分析

    Java ArrayList源码深入分析 概述 Java中的ArrayList是最基础的动态数组实现,是Java集合框架中的重要组成部分。本文将分析ArrayList源码,通过详细的代码解析和实例说明,深入分析ArrayList的内部实现原理。 前置知识 在深入分析ArrayList源码之前,需要具备以下基础知识: Java集合框架的基本概念和应用场景 数组…

    Java 2023年5月26日
    00
  • 详解Java实现拓扑排序算法

    详解Java实现拓扑排序算法 什么是拓扑排序算法 拓扑排序算法是一种用来解决有向图中节点之间依赖关系问题的算法,它可以将有向无环图(DAG)中的所有节点按照一定的规则排序,可以用来确定一组任务的执行顺序,比如编译器可以用拓扑排序来确定源代码的编译顺序。 拓扑排序算法原理 拓扑排序算法基于DAG图,DAG图中每个节点表示一个任务,有向边表示任务之间的依赖关系,…

    Java 2023年5月19日
    00
  • 搭建MyBatis开发环境及基本的CURD介绍

    关于搭建MyBatis开发环境以及基本的CURD介绍,我们需要以下几步: 安装 Java SE环境 首先需要在本地安装好Java SE环境,通常使用官网提供的JDK安装包进行安装,安装完毕之后可以使用 java -version 命令查看安装是否成功。 安装和配置 Maven Maven是一个Java项目管理工具,可以方便地管理Java项目中的依赖关系和构建…

    Java 2023年6月2日
    00
  • Java JDK1.5、1.6、1.7新特性整理

    Java JDK1.5、1.6、1.7新特性整理 Java JDK1.5新特性 自动装箱、拆箱 Java JDK1.5引入了自动装箱和拆箱功能,即可以自动将基本类型和它们对应的包装类型进行转换。例如: // 自动装箱 Integer i = 10; // 自动拆箱 int j = i; 可变参数 Java JDK1.5引入了可变参数功能,即可以在方法中使用任…

    Java 2023年5月24日
    00
  • 使用maven生成可执行的jar包的方法

    生成可执行的jar包是Maven的一个非常重要的功能, 可以将所有依赖打包成一个jar文件,方便部署和分发应用程序。下面是使用Maven生成可执行的jar包的步骤: 步骤1:创建Maven项目 首先我们需要创建一个Maven项目,并在pom.xml文件中添加插件来生成可执行的jar包。 步骤2:设置Maven插件 在pom.xml文件中添加如下配置,以使用M…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部