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 Apache POI报错“EncryptedDocumentException”的原因与解决办法

    “EncryptedDocumentException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 文档加密:如果文档被加密,则可能会出现此异常。例如,可能会尝试打开受密码保护的Excel文档。 以下是两个实例: 例1 如果文档被加密,则可以尝试使用正确的密码以解决此问题。例如,在Java中,可以使用以下代码: FileInp…

    Java 2023年5月5日
    00
  • Java实现Fibonacci(斐波那契)取余的示例代码

    下面是Java实现Fibonacci取余的示例代码完整攻略。 什么是斐波那契数列 斐波那契数列是指这样一个数列:0、1、1、2、3、5、8、13、21、34、……。这个数列从第3项开始,每一项都等于前两项之和。 如何实现取余功能 通过取余运算,可以有效地提高程序的效率,避免计算数值过大而发生数据溢出的情况。 在Java中,可以通过取模(%)运算符来实现取余操…

    Java 2023年5月18日
    00
  • Java8方法引用及构造方法引用原理实例解析

    Java8方法引用及构造方法引用原理实例解析 Java 8中引入了方法引用(Method Reference)的语法,可以根据Lambda表达式,快速地指向一个已有方法,从而简化编程。 方法引用使用“::”符号来定位某个方法,并用Lambda表达式将方法和函数式接口绑定在一起,从而由Java编译器自动完成Lambda表达式的类型推断。 方法引用的语法格式为:…

    Java 2023年5月26日
    00
  • java 一个截取字符串的函数

    当我们需要截取字符串的某一部分时,Java中提供了多种方式来实现。下面是使用Java标准库中的函数来截取字符串的示例攻略: 步骤1:了解substring()函数 Java提供了一个原生函数 substring(),它可以从一个字符串中截取出部分内容。 substring() 函数签名如下: public String substring(int begin…

    Java 2023年5月26日
    00
  • 详解配置spring-boot-actuator时候遇到的一些小问题

    下面我将详细讲解如何配置spring-boot-actuator时可能会遇到的一些小问题,包括监控端点的配置、安全性配置、接口映射等,同时附带两个示例。 监控端点的配置 spring-boot-actuator中默认提供了很多监控端点,包括/health、/info、/metrics等,可以通过application.properties或applicati…

    Java 2023年5月20日
    00
  • Java实现BASE64编码和解码的方法

    下面是“Java实现BASE64编码和解码的方法”的完整攻略。 BASE64编码和解码概述 BASE64是一种基于64个可打印字符来表示二进制数据的算法,在网络传输中常用于数据加密和解密、数字签名等领域。 BASE64编码 BASE64编码可以将任意二进制数据编码成可打印的ASCII字符集的代表字符串,常用于将二进制数据在网络传输或者在文本协议中作为参数进行…

    Java 2023年5月20日
    00
  • IDEA的下载和使用安装详细图文教程

    IDEA的下载和安装 下载 前往IntelliJ IDEA官网(https://www.jetbrains.com/idea/),下载适合自己操作系统的版本。 安装 双击安装包,选择语言后点击”Next”。 选择安装路径,如果不设置,则默认在Program Files(x86)路径下创建一个JetBrains的文件夹。 可以选择创建桌面图标以及启动菜单等选项…

    Java 2023年6月15日
    00
  • Java中super关键字介绍以及super()的使用

    当子类需要引用父类的构造方法、成员变量或成员方法时,需要使用Java中的super关键字。super也可以理解为是当前对象的父类对象。 super的使用有以下几种形式: 使用super引用父类的成员变量和成员方法 在子类中可以使用super关键字来引用父类的成员变量和成员方法。例如: public class Parent { private int age…

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