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

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日

相关文章

  • Java基础之常用的命令行指令

    Java基础之常用的命令行指令 在使用Java开发中,经常需要在命令行中执行一些操作,例如编译、运行Java程序等。下面是常用的命令行指令及其作用。 javac javac是Java编译器,可以将Java源代码编译成Java字节码文件(.class文件)。使用方法如下: javac HelloWorld.java 上述指令将会编译HelloWorld.jav…

    Java 2023年5月19日
    00
  • Java多线程基本概念以及避坑指南

    下面是关于Java多线程基本概念以及避坑指南的完整攻略。 基本概念 线程 线程是操作系统执行的最小单位,它负责程序的运行。在Java中,线程的创建和使用由Thread类和Runnable接口完成。 可以通过以下方式创建线程: 继承Thread类并重写run()方法。 实现Runnable接口,并通过Thread类的构造函数将Runnable对象传递给Thre…

    Java 2023年5月19日
    00
  • C#实现的最短路径分析

    下面是C#实现最短路径分析的完整攻略: 什么是最短路径分析? 最短路径分析是图论中的一个重要问题,在某个图中,起点到终点之间有多条路径可以选择,最短路径算法就是找到这些路径中最短的那个。最短路径算法可应用于交通运输、电信网络等众多领域中。 最短路径分析的算法及实现 最短路径分析的算法有多种,其中 Dijkstra 算法和 Floyd-Warshall 算法较…

    Java 2023年5月19日
    00
  • xml+php动态载入与分页

    下面我将详细讲解 “XML+PHP动态载入与分页” 的实现过程。 什么是XML+PHP动态载入与分页? XML+PHP动态载入与分页是一种网站动态载入和分页内容的技术,它可以帮助网站实现异步加载、无刷新加载和分页加载等功能。在这种技术中,我们将数据存储在XML文件中,通过PHP程序实现读取和处理XML数据,并通过Ajax技术进行实时载入数据,从而实现网页内容…

    Java 2023年6月16日
    00
  • Sprint Boot @JsonProperty使用方法详解

    @JsonProperty是Spring Boot中的一个注解,用于指定Java对象在序列化为JSON字符串时的属性名。在本文中,我们将详细介绍@JsonProperty注解的作用和使用方法,并提供两个示例。 @JsonProperty注解的作用 @JsonProperty注解用于指定Java对象在序列化为JSON字符串时的属性名。当使用@JsonPrope…

    Java 2023年5月5日
    00
  • Spring Security权限管理实现接口动态权限控制

    以下是关于Spring Security权限管理实现接口动态权限控制的完整攻略: 1. 什么是接口动态权限控制 接口动态权限控制即根据用户的权限动态的对接口进行权限控制,这个过程可以分为两步:一是获取用户所拥有的权限,二是根据用户所拥有的权限动态的对接口进行控制。 2. Spring Security实现接口动态权限控制的步骤 以下是实现Spring Sec…

    Java 2023年6月3日
    00
  • JSP教程(一)

    下面是“JSP教程(一)”的完整攻略: JSP教程(一) 什么是JSP JSP(Java Server Pages) 是一种动态网页开发技术,它是由Servlet API的编程模型衍生而来的。JSP技术将Java代码嵌入到HTML文档中,用于动态处理网页的内容。当客户端发起请求时,JSP容器会将JSP编译为Servlet并执行。 JSP的特点 处理动态内容 …

    Java 2023年6月15日
    00
  • Echarts+SpringMvc显示后台实时数据

    下面是关于“Echarts+SpringMVC显示后台实时数据”的完整攻略,包含两个示例说明。 Echarts+SpringMVC显示后台实时数据 Echarts是一个流行的JavaScript图表库,它可以帮助我们更加方便地构建Web图表。本文将介绍如何使用Echarts和SpringMVC框架显示后台实时数据。 步骤一:创建SpringMVC项目 首先,…

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