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

yizhihongxing

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实现多人聊天系统需要考虑网络通信、多线程编程以及GUI等方面,下面我将为您提供完整攻略。 一、基本框架设计 1.客户端 客户端的基本框架设计如下: 登录界面:输入用户名和密码进行登录操作; 聊天窗口:展示聊天信息,提供发送聊天内容的输入框和发送按钮; 好友列表:展示当前在线的好友列表,支持选择好友进行私聊。 2.服务器端 服务器需要处理以下事项: 处…

    Java 2023年5月24日
    00
  • Java使用动态规划算法思想解决背包问题

    Java 使用动态规划算法思想解决背包问题 什么是动态规划算法 动态规划(Dynamic Programming)是一种解决多阶段决策问题的优化方法。它将问题分解为多个阶段,并针对每个阶段进行决策。每个阶段的决策将会影响后续的阶段,因此需要对每个阶段进行全局最优化的考虑,以确保最终的结果是最优的。 背包问题 背包问题(Knapsack Problem)是常见…

    Java 2023年5月19日
    00
  • hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法

    下面是我对“hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法”的完整攻略。 1. 什么是 fetch=FetchType.LAZY 懒加载? 在 Hibernate 中,fetch 是控制语句 load 与 get 的机制的一个选项。fetch = FetchType.LAZY 就是懒加载模式。它是指当我们使用 Hiber…

    Java 2023年5月20日
    00
  • idea创建springboot项目和springcloud项目的详细教程

    下面是“IDEA创建Spring Boot项目和Spring Cloud项目的详细教程”的攻略: 创建Spring Boot项目 打开IntelliJ IDEA,点击菜单栏中的File → New → Project; 在弹出的New Project窗口中选择Spring Initializr,点击Next按钮; 在下一个页面中填写项目的基本信息(如Grou…

    Java 2023年5月19日
    00
  • Spring Boot实现热部署的实例方法

    下面是详细讲解“Spring Boot实现热部署的实例方法”的完整攻略,攻略分为如下部分: 介绍热部署的概念和优势 Spring Boot实现热部署的配置方法和步骤 附带两个示例说明 1. 热部署的概念和优势 热部署(Hot Deployment)是指在应用程序运行时,对已经部署的程序代码进行修改,无需停止应用程序,即可自动更新代码的部署方式。热部署能够极大…

    Java 2023年5月26日
    00
  • JAVA文件读写例题实现过程解析

    下面是关于JAVA文件读写例题实现过程解析的详细攻略: 1. 什么是文件读写 文件读写是指读取或者写入文件的一种操作。在Java中,通过File、FileReader、FileWriter类和BufferedReader、BufferedWriter类可以实现文件读写操作。 2. 文件读取的过程 文件读取的过程通常由以下几个步骤组成: 2.1 创建File对…

    Java 2023年5月19日
    00
  • 深入理解java三种工厂模式

    深入理解Java三种工厂模式 工厂设计模式概述 工厂设计模式是一种常见的创建型设计模式,它提供了一个创建对象的接口,但是允许子类决定实例化哪个类。工厂模式可以将对象的实例化过程从客户代码中分离出来,从而实现了松耦合,提高了代码的可维护性和可扩展性。 Java中有三种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式。接下来我们将逐一解析这三种模式。 简单工厂…

    Java 2023年5月20日
    00
  • 新手初学Java基础

    新手初学Java 基础攻略 前言 Java 作为一门广泛应用的编程语言,其庞大、复杂的体系往往令初学者感到无从下手。在这篇攻略中,我将给予你一些学习Java基础的建议,帮助你更快、更轻松地掌握这门技艺。 学习 Java 基础的前提要求 掌握计算机基础知识,包括数据结构和算法、操作系统、网络通信等; 掌握一门编程语言的基础语法,例如C或Python等; 熟悉常…

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