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日

相关文章

  • SpringBoot详解整合Spring Boot Admin实现监控功能

    SpringBoot详解整合Spring Boot Admin实现监控功能 简介 Spring Boot Admin是用于管理和监控一个或多个Spring Boot应用程序的应用程序。相比于spring-boot-actuator,默认Web UI很友好。此外,它还提供了以下功能: 显示应用程序的元数据(例如:Git提交信息,构建时间等) 显示健康检查状态以…

    Java 2023年5月19日
    00
  • Netty结合Protobuf进行编解码的方法

    Netty结合Protobuf进行编解码的方法可以分为以下步骤: 添加依赖 为了使用Netty结合Protobuf进行编解码,需要添加以下两个依赖到项目的构建文件中: <!– 定义 protobuf 插件 –> <plugin> <groupId>org.xolstice.maven.plugins</group…

    Java 2023年5月20日
    00
  • Python中使用jpype调用Jar包中的实现方法

    Sure,下面是Python中使用jpype调用Jar包中的实现方法的完整攻略: 确认环境和准备工作 首先需要确认使用的是Python3,并且安装了最新版的Pip,然后使用Pip来安装jpype1库。同时需要准备好需要使用的Jar包或Java类所在的Jar包。 使用示例 假设我们有一个Java类com.example.HelloWorld,它包含一个名为sa…

    Java 2023年5月26日
    00
  • 关于spring data jpa 模糊查询like的坑点

    好的。首先让我们讨论一下”关于Spring Data JPA模糊查询Like的坑点”的具体情况。 什么是Spring Data JPA模糊查询Like的坑点? 如果我们想使用Spring Data JPA执行模糊查询(例如使用LIKE操作符),我们需要注意一些事项。这些主要涉及到通配符的使用和查询条件的拼接。 通配符的使用 在使用LIKE操作符时,我们需要使…

    Java 2023年5月20日
    00
  • JDK1.7 Paths,Files类实现文件夹的复制与删除的实例

    首先,我们需要了解一下JDK1.7引入的Paths和Files类,它们提供了更加方便的文件和路径操作方法。 1. 复制文件夹 示例1 让我们看一下如何使用Paths和Files类来实现复制整个文件夹的功能。 import java.io.IOException; import java.nio.file.Files; import java.nio.file…

    Java 2023年5月19日
    00
  • Java的jstack命令使用示例详解

    Java的jstack命令使用示例详解 一、jstack命令简介 jstack是JDK自带的命令行工具,可以用于查看Java应用程序的线程堆栈信息。它可以显示Java应用程序内所有线程的堆栈信息,包括线程ID、线程名称、线程状态、等待对象、栈帧、堆栈深度等信息。通过jstack命令获取线程堆栈信息,可以帮助检查Java应用程序的线程卡死、死锁等问题。 二、j…

    Java 2023年5月26日
    00
  • PHP模板引擎SMARTY

    下面我将详细讲解“PHP模板引擎SMARTY”的完整攻略。 什么是SMARTY? SMARTY是一个PHP模板引擎,它使网页和应用程序代码分离,从而使页面逻辑更加清晰和易于维护。SMARTY不是用来代替PHP的,而是在PHP之上提供了一种模板语言,用于管理和构建网页。 SMARTY的优势 SMARTY引擎的优势主要包括: 模板和代码分离:使用SMARTY可以…

    Java 2023年6月15日
    00
  • Java实现数据连接池Druid举例

    Java实现数据连接池是常见的优化数据库性能的方法,其中Druid是一款深受Java开发者喜爱的开源数据连接池。下面我会为你详细讲解Java实现数据连接池Druid的完整攻略,包括Druid的使用和示例。 1. 引入Druid依赖 Druid是由阿里巴巴开发的一款 Java 数据库连接池,你可以通过添加以下依赖来引入Druid: <dependency…

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