JAVA 字符串加密、密码加密实现方法

yizhihongxing

JAVA字符串加密方法

在JAVA中,常见的字符串加密方法有MD5加密、SHA1加密和BASE64加密。下面分别介绍每种加密方法。

MD5加密

MD5全名为Message-DigestAlgorithm 5,即消息摘要算法5。它是一种单向加密算法,加密后的结果不能被逆向破解。MD5加密的原理是将任意长度的数据(字符串)通过一定的算法变换成一个固定长度的摘要信息(通常是32位的十六进制字符串表示),不同的输入得到的结果是完全不同的。MD5加密的代码示例如下:

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {

    public static String md5(String plainText) {
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有这个md5算法!");
        }
        String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
        // 如果生成数字未满32位,需要前面补0
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }
}

SHA1加密

SHA1是一种单向加密算法,它和MD5算法类似,只不过SHA1生成的摘要信息(通常是40位的十六进制字符串表示)更长,更加安全。SHA1加密的代码示例如下:

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

public class SHA1Util {

    public static String sha1(String plainText) {
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("SHA-1")
                    .digest(plainText.getBytes());
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有这个SHA-1算法!");
        }
        String sha1code = bytesToHexString(secretBytes);
        return sha1code;
    }

    public static String bytesToHexString(byte[] bytes) {
        StringBuilder builder = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() == 1) {
                builder.append("0");
            }
            builder.append(hex.toUpperCase());
        }
        return builder.toString();
    }

}

BASE64加密

BASE64是一种可逆的加密算法,加密后的字符只包含A~Z、a~z、0~9、+、/和=这些字符,它可以将二进制数据编码成文本格式,方便传输和存储。BASE64加密的代码示例如下:

import java.util.Base64;

public class BASE64Util {

    public static String base64Encode(String str) {
        byte[] bytes = str.getBytes();
        String encoded = Base64.getEncoder().encodeToString(bytes);
        return encoded;
    }

    public static String base64Decode(String encodedStr) {
        byte[] decoded = Base64.getDecoder().decode(encodedStr);
        String decodedStr = new String(decoded);
        return decodedStr;
    }

}

JAVA密码加密方法

在JAVA中,常见的密码加密方法有bcrypt加密和PBKDF2加密。下面分别介绍每种加密方法。

bcrypt加密

bcrypt是一种单向加密算法,它通过增加工作因子的方式,来增加暴力破解的难度,从而提高安全性。bcrypt的工作因子越大,算法就越安全,但也越慢。bcrypt加密的代码示例如下:

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class BcryptUtil {

    private static final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(10);

    public static String bcryptEncode(String str) {
        String encoded = passwordEncoder.encode(str);
        return encoded;
    }

    public static boolean bcryptMatch(String str, String encodedStr) {
        boolean match = passwordEncoder.matches(str, encodedStr);
        return match;
    }
}

PBKDF2加密

PBKDF2是一种单向加密算法,它通过增加迭代次数的方式,来增加暴力破解的难度,从而提高安全性。PBKDF2的迭代次数越多,算法就越安全,但也越慢。PBKDF2加密的代码示例如下:

import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;

public class PBKDF2Util {

    private static final int ITERATIONS = 4096;
    private static final int KEY_LENGTH = 256;

    public static byte[] generateSalt() {
        byte[] salt = new byte[16];
        SecureRandom random = new SecureRandom();
        random.nextBytes(salt);
        return salt;
    }

    public static byte[] pbkdf2(char[] password, byte[] salt) {
        PBEKeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, KEY_LENGTH);
        SecretKeyFactory skf;
        byte[] hash = null;
        try {
            skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
            hash = skf.generateSecret(spec).getEncoded();
        } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
            e.printStackTrace();
        }
        return hash;
    }

}

以上是JAVA字符串加密、密码加密的实现方法,可以根据具体需求选择使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA 字符串加密、密码加密实现方法 - Python技术站

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

相关文章

  • kotlin实战教程之lambda编程

    Kotlin实战教程之Lambda编程攻略 本教程将带领读者深入学习Kotlin中Lambda编程的知识点,并且提供实用的示例代码帮助读者快速掌握Lambda编程技巧。下面将从以下几个方面进行讲解: Lambda表达式的基本语法 Kotlin中Lambda表达式的使用 常用的Lambda函数 1. Lambda表达式的基本语法 Lambda表达式是一种匿名函…

    Java 2023年5月26日
    00
  • 你知道Java的这些骚操作吗?

    当然,没问题! 你知道Java的这些骚操作吗? 1. 位运算 位运算是一种直接对二进制位进行操作的运算,通常用于系统底层开发和优化计算速度。Java内置了多种位运算符,具体有: 按位与(&) 按位或(|) 按位异或(^) 取反(~) 左移位(<<) 右移位(>>) 无符号右移位(>>>) 示例 int a =…

    Java 2023年5月23日
    00
  • java 中模式匹配算法-KMP算法实例详解

    Java中模式匹配算法-KMP算法实例详解 什么是模式匹配算法? 模式匹配算法是计算机科学中的一个基本问题,它是指在一个字符串中查找特定模式的过程。模式通常是一个短字符串,而在给定的文本字符串中查找该模式的过程被称为找到模式。模式匹配在很多领域应用广泛,如文本查找、图像处理、数据压缩等。 什么是KMP算法? KMP算法是一种著名的模式匹配算法,也称作 Knu…

    Java 2023年5月19日
    00
  • Struts2 自定义下拉框Tag标签

    下面给出完整的Struts2自定义下拉框Tag标签的攻略,包含以下内容: Struts2中的Tag标签简介。 下拉框Tag标签实现方式的介绍。 自定义下拉框Tag标签的步骤和示例。 1. Struts2中的Tag标签简介 Struts2是一个MVC框架,它提供了很多的Tag标签,包括表单、数据列表等等,这些Tag标签可以帮助我们快速开发Web应用。 在JSP…

    Java 2023年5月20日
    00
  • java中注解机制及其原理的详解

    以下是关于“Java中注解机制及其原理的详解”的攻略: 什么是注解(Annotation)? 在Java中,注解是一种附加在代码中的元信息,是Java语言的一种特殊数据类型。它可以在编译、运行时被读取,并能够在不影响代码运行的情况下被修改。注解通常可以用来为程序添加额外的说明或标记。 Java中的注解结构 Java中的注解由Java语言规范所定义的注解、注解…

    Java 2023年5月26日
    00
  • JSP程序运行原理、文档结构及简单输入输出实例分析

    JSP程序运行原理 JSP(Java Server Pages)程序是基于Java Web的一种技术。在JSP的开发中,我们可以利用JSP页面来实现动态生成HTML页面,而这个动态过程需要经过以下三个步骤: 浏览器发送请求到Web服务器。 Web服务器将JSP页面发送给JSP引擎进行解析。 JSP引擎将JSP页面转换为Servlet并进行编译,然后由serv…

    Java 2023年6月15日
    00
  • Java 数组交集的实现代码

    下面是Java数组交集的实现代码完整攻略。 实现思路 交集是指两个集合中都存在的元素,可以用两种方法来实现数组交集。 嵌套循环:在第一个数组中循环遍历每个元素,在第二个数组中再循环遍历每个元素,如果两个元素相等,则为交集元素之一。 HashSet数据结构:使用HashSet将第一个数组中的元素都添加进去,然后遍历第二个数组,在HashSet中查找是否存在相同…

    Java 2023年5月26日
    00
  • SpringBoot学习之全局异常处理设置(返回JSON)

    下面是关于“SpringBoot学习之全局异常处理设置(返回JSON)”的完整攻略。 一、背景 在实际开发中,经常因为代码中潜在的异常、业务异常等原因导致程序崩溃或返回异常信息。为了更好地保护程序的健壮性,我们通常会设置全局异常处理器,统一处理这些异常信息,并返回统一的异常信息给客户端。本文主要讲解如何在SpringBoot项目中配置全局异常处理器并返回JS…

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