Java实现常用的三种加密算法详解

Java实现常用的三种加密算法详解

在现今的网络环境中,数据安全越来越重要。加密算法就是保证数据安全的重要手段之一。在Java语言中,实现常用的三种加密算法十分方便。这里将分别介绍Java中常用的MD5、SHA和AES加密算法的实现方法。

1. MD5加密

MD5(Message-Digest Algorithm 5)算法是一种常用的摘要算法,可以将任意长度的数据通过运算转换为一个128位的哈希值,通常该值用32位的16进制数表示。MD5算法适用于数据比较简单的情况下进行加密。在Java中,使用MD5加密可通过MessageDigest类来实现。

以下是MD5加密的示例代码:

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

public class MD5Util {
    public static String getMd5(String str) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            byte[] bytes = md5.digest(str.getBytes());
            StringBuilder builder = new StringBuilder();
            for (byte b : bytes) {
                String hexString = Integer.toHexString(b & 0xff);
                if (hexString.length() == 1) {
                    builder.append("0");
                }
                builder.append(hexString);
            }
            return builder.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}

使用示例:

String password = "123456";
String md5Password = MD5Util.getMd5(password);
System.out.println("原密码:" + password);
System.out.println("MD5加密后:" + md5Password);

输出结果:

原密码:123456
MD5加密后:e10adc3949ba59abbe56e057f20f883e

2. SHA加密

SHA(Secure Hash Algorithm)算法是一种哈希算法,常用的有SHA-1、SHA-256、SHA-384、SHA-512等变种。SHA算法比MD5算法更安全, SHA-256、SHA-384和SHA512比SHA1更安全。在Java中,使用SHA加密也可以通过MessageDigest类来实现。

以下是SHA-256加密的示例代码:

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

public class SHAUtil {
    public static String getSha256(String str) {
        try {
            MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
            byte[] bytes = sha256.digest(str.getBytes());
            StringBuilder builder = new StringBuilder();
            for (byte b : bytes) {
                String hexString = Integer.toHexString(b & 0xff);
                if (hexString.length() == 1) {
                    builder.append("0");
                }
                builder.append(hexString);
            }
            return builder.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}

使用示例:

String password = "123456";
String sha256Password = SHAUtil.getSha256(password);
System.out.println("原密码:" + password);
System.out.println("SHA-256加密后:" + sha256Password);

输出结果:

原密码:123456
SHA-256加密后:c6bb28b7f1fc8dee72231fc6e34a2fcc1f6b7563478cc290386a7046b07df109

3. AES加密

AES(Advanced Encryption Standard)算法是一种对称加密算法,其中AES-128位密钥比较流行。在Java中,使用AES加密可以通过Cryptography类来实现。

以下是AES-128加密的示例代码:

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESUtil {
    private static final String KEY = "1234567812345678";
    private static final String IV = "1234567812345678";

    public static String encrypt(String str) {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            byte[] keyBytes = KEY.getBytes();
            SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
            IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
            byte[] bytes = cipher.doFinal(str.getBytes());
            return Base64.getEncoder().encodeToString(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    public static String decrypt(String str) {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            byte[] keyBytes = KEY.getBytes();
            SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
            IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(str.getBytes()));
            return new String(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
}

使用示例:

String password = "123456";
String encryptPassword = AESUtil.encrypt(password);
String decryptPassword = AESUtil.decrypt(encryptPassword);
System.out.println("原密码:" + password);
System.out.println("AES加密后:" + encryptPassword);
System.out.println("AES解密后:" + decryptPassword);

输出结果:

原密码:123456
AES加密后:D94pXqAtFpAEiWYdwlChvA==
AES解密后:123456

结语

以上就是Java实现常用的三种加密算法的详细讲解。在实际开发中,要根据实际情况选择合适的加密算法,并注意密钥的安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现常用的三种加密算法详解 - Python技术站

(1)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • java实现动态编译并动态加载

    Java实现动态编译并动态加载是一种非常强大和灵活的技术。本篇文章将介绍如何实现Java的动态编译和加载,并给出两个示例说明。 动态编译的实现 Java中的动态编译是通过使用Java提供的Compiler API来实现的。在Java中,编译器可以将Java源代码编译成字节码,这些字节码可以直接在Java虚拟机上运行。下面是一些使用Java Compiler …

    Java 2023年5月26日
    00
  • java的Hibernate框架报错“LockAcquisitionException”的原因和解决方法

    当使用Java的Spring Boot框架时,可能会遇到“CannotAcquireLockException”错误。这个错误通常是由于以下原因之一引起的: 数据库并发问题:如果多个用户同时访问同一条记录并尝试更新,则可能会出此错误。在这种情况下,需要使用乐观锁或悲观锁来解决并发问题。 数据库锁定问题:如果数据库锁定了某些记录,则可能会出现此错误。在这种情况…

    Java 2023年5月4日
    00
  • Java基于Dijkstra算法实现校园导游程序

    Java基于Dijkstra算法实现校园导游程序攻略 1. 确定算法 首先,我们需要确定使用什么算法来实现校园导游程序,此处我们选择使用Dijkstra算法。 Dijkstra算法是一种用于带权图的单源最短路径算法,可以帮助我们找到两点之间的最短路径。在本程序中,我们需要将所有景点看作节点,将各个景点之间的距离看作边权,应用Dijkstra算法求解距离最短的…

    Java 2023年5月19日
    00
  • Java实战之OutOfMemoryError异常问题及解决方法

    Java实战之OutOfMemoryError异常问题及解决方法 在Java应用程序开发中,OutOfMemoryError异常是经常会遇到的一个问题。当应用程序的内存使用超出JVM所能分配的内存大小时,就会抛出OutOfMemoryError异常。这个问题会严重影响应用程序的稳定性和性能,因此解决这个问题是非常重要的。 什么是OutOfMemoryErro…

    Java 2023年5月27日
    00
  • Jenkins+maven持续集成的实现

    好的!下面就详细讲解一下“Jenkins+maven持续集成的实现”的完整攻略。 1. 简介 Jenkins是一个流行的开源持续集成工具,用于构建、自动化测试、部署、监控软件项目。而Maven则是一个流行的Java项目构建工具。利用Jenkins和Maven进行持续集成可以大大提高软件开发的效率和质量。 2. 实现过程 2.1 安装Jenkins 首先需要在…

    Java 2023年5月20日
    00
  • jsp实现局部刷新页面、异步加载页面的方法

    让我来为您详细讲解一下“JSP实现局部刷新页面、异步加载页面的方法”的完整攻略。 前言 JSP(Java Server Pages)是一种基于Java技术的Web开发技术,它允许开发人员在HTML标签中包含Java代码,并通过编译器将其转换为Java Servlet。JSP通常与MVC(Model-View-Controller)设计模式一起使用,它允许开发…

    Java 2023年6月15日
    00
  • SpringBoot入门实现第一个SpringBoot项目

    首先,我们需要进行一些准备工作: 安装JDK,并配置好环境变量。 安装Maven,并配置好环境变量。 安装IDEA或者其他Java开发工具。 接下来,按照以下步骤来进行SpringBoot入门实现第一个SpringBoot项目。 1. 创建一个SpringBoot项目 我们可以通过使用Spring Initializr来创建一个SpringBoot项目,步骤…

    Java 2023年5月15日
    00
  • SpringBoot整合Apache Pulsar教程示例

    SpringBoot整合Apache Pulsar教程示例 本教程将介绍如何使用SpringBoot框架和Apache Pulsar进行消息队列的集成,我们将使用两个不同的示例进行演示,以展示如何将消息发送到Pulsar,并如何从Pulsar中接收消息。 示例1: 发送消息到Pulsar 我们首先来看如何使用SpringBoot和Pulsar在代码中发送消息…

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