JAVA简单实现MD5注册登录加密实例代码

下面是“JAVA简单实现MD5注册登录加密实例代码”的攻略:

1. MD5简介

MD5,全称为Message-Digest Algorithm 5,是一种常用的密码散列函数,可以将任意长度的信息(不限于字符串)映射为一个128位(16字节)的哈希值。通常用于数据完整性校验和密码存储等场合。

2. MD5加密步骤概述

MD5算法分为4步:

  • 填充数据
  • 初始化状态变量
  • 处理分组数据
  • 输出结果

3. JAVA实现MD5加密

Java通过java.security.MessageDigest类和java.util.Base64类提供了MD5算法实现。

下面是基于Java提供的MessageDigest实现的MD5加密示例代码:

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

public class MD5Utils {
    /**
     * Encode string using MD5 algorithm
     *
     * @param input
     * @return MD5 hash
     * @throws NoSuchAlgorithmException
     */
    public static String md5(String input) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(input.getBytes());
        BigInteger number = new BigInteger(1, messageDigest);
        String md5 = number.toString(16);

        while (md5.length() < 32) {
            md5 = "0" + md5;
        }

        return md5;
    }
}

4. 注册登录加密实例代码

下面是一个用Java实现的基于MD5的注册登录加密实例代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;

public class User {

    private static final String SALT = "MySalt";

    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public boolean authenticate(String password) throws NoSuchAlgorithmException {
        return this.password.equals(MD5(password + SALT));
    }

    private String MD5(String input) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");

        md.update(input.getBytes());

        byte[] digest = md.digest();

        StringBuilder sb = new StringBuilder();

        for (byte b : digest) {
            sb.append(Integer.toHexString((b & 0xff) | 0x100).substring(1));
        }

        return sb.toString();

    }

    public static void main(String[] args) throws NoSuchAlgorithmException {

        Scanner sc = new Scanner(System.in);
        System.out.println("Enter your username:");
        String username = sc.nextLine();

        System.out.println("Enter your password:");
        String password = sc.nextLine();

        String hashedPassword = MD5(password + SALT);

        User user = new User(username, hashedPassword);

        System.out.println("Login to your account:");

        System.out.println("Enter your password:");

        boolean isAuthenticated = user.authenticate(sc.nextLine());

        if (isAuthenticated) {
            System.out.println("Welcome, " + user.username + "!");
        } else {
            System.out.println("Login failed!");
        }
    }
}

在这个示例代码中,我们通过定义一个User类来实现注册和登录,以及密码的加密和比对。在密码加密时,我们使用固定的SALT值对用户密码进行加盐,然后再通过MD5算法进行加密处理。在比对用户密码时,我们通过User类的authenticate()方法来验证用户密码是否正确。

5. 参考资料

  • Message-Digest Algorithm 5 (MD5), https://en.wikipedia.org/wiki/MD5
  • Java MessageDigest API documentation, https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/security/MessageDigest.html
  • Java Base64 API documentation, https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Base64.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA简单实现MD5注册登录加密实例代码 - Python技术站

(1)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • java list 比较详解及实例

    Java List 比较详解及实例 什么是 Java 中的 List? 在 Java 中,List 是一个接口,用于表示一组有序的元素集合。它是 Collection 接口的子接口,因此,它继承了父接口的许多方法,如 add()、remove()、contains() 等等。与其他集合不同的是,List 中的元素是有顺序的,因此,可以通过元素在列表中的位置来…

    Java 2023年5月26日
    00
  • Linux系统中怎么设置java环境变量?

    在Linux系统中设置Java环境变量,需要进行以下几个步骤: 1. 安装Java 首先需要在Linux系统中安装Java。可以去Java官网下载对应版本的Java安装包。下载完后,使用命令行工具进入安装包所在目录,执行以下命令进行安装: sudo tar zxvf jdk-xu-xu.tar.gz -C /usr/local/ 其中,jdk-xu-xu.t…

    Java 2023年5月26日
    00
  • 如何实现线程安全的算法?

    以下是关于线程安全的算法的完整使用攻略: 什么是线程安全的算法? 线程安全的算法是指在多线程环境下,多个线程可以同时访问算法而不会出现数据不一致或程序崩溃等问题。在线程编程中,线程安全的算法是非常重要的,因为多个线程同时访问算法,会出现线程争用的问题,导致数据不一致或程序崩溃。 如何实现线程安全的算法? 为实现线程安全的算法需要使用同步机制来保证多线程对算法…

    Java 2023年5月12日
    00
  • Java中JFinal框架动态切换数据库的方法

    下面我将详细讲解“Java中JFinal框架动态切换数据库的方法”的完整攻略。 1. 背景 JFinal框架是一个优秀的Java Web开发框架,它集成了众多实用的插件,如ActiveRecord、JFinal-Enjoy等,使开发变得更加高效。在实际开发中,常常会遇到需要动态切换数据库的情况,这时候我们就需要使用JFinal框架提供的多数据源功能来完成这个…

    Java 2023年5月19日
    00
  • Java中redis的基本类型

    以下是 “Java中redis的基本类型”的详细攻略。 什么是Redis Redis是一个开源的基于键值对存储的NoSQL数据库系统。它支持字符串、列表、集合、有序集合、哈希表等数据类型,同时也支持发布订阅、事务、Lua脚本等高级功能。Redis的主要优势是性能高、稳定性强,同时支持丰富的数据类型和数据结构。 Redis中的基本数据类型 字符串类型 Redi…

    Java 2023年5月20日
    00
  • 解析Hibernate + MySQL中文乱码问题

    解析Hibernate + MySQL中文乱码问题的攻略如下: 问题描述 在Hibernate+MySQL环境下,中文字符在数据库中存储后出现乱码。该问题可能出现在在Hibernate实体(Entity)属性中,或者是从数据库中读取的字符串。 原因分析 中文乱码问题通常是因为字符集(Charset)不一致导致的。在Hibernate和MySQL中,字符集需要…

    Java 2023年5月20日
    00
  • JAVA文件扫描(递归)的实例代码

    下面是详细的讲解 “JAVA文件扫描(递归)的实例代码” 的攻略。 目标 我们的目标是编写一个可以在指定目录下递归查找文件和文件夹的 Java 代码。我们将使用 File 类和递归的方法来实现这一目标。 实现过程 步骤一:创建一个 Java 类 首先,我们需要创建一个 Java 类来编写代码。您可以选择使用您最喜欢的 Java IDE 编辑器,或者在命令行中…

    Java 2023年5月20日
    00
  • Java内存溢出的几个区域总结(注意避坑!)

    Java内存溢出的几个区域总结(注意避坑!) 在Java应用程序中,如何管理和控制内存使用是非常重要的。Java虚拟机管理内存的方式不同于C++或其他语言,因为Java虚拟机使用堆区域来分配内存,并且具有垃圾回收机制。然而,这些不同也使得Java应用程序容易遭遇内存溢出错误。在这篇文章中,我们将概述Java中主要的内存区域,如何避免内存泄漏和内存溢出错误。 …

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