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

yizhihongxing

下面是“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之JSP教程九大内置对象详解(下篇)

    针对“Java之JSP教程九大内置对象详解(下篇)”这篇文章,我来为您进行详细讲解。 首先,文章中提到的JSP九大内置对象包括:request、response、session、application、out、pageContext、config、page、exception。这些对象在JSP中可以直接调用,在编写JSP页面时非常常用。以下逐一进行介绍: r…

    Java 2023年5月26日
    00
  • Java之一文详解String字符串的用法

    Java之一文详解String字符串的用法 1. 什么是字符串(String)? 在 Java 语言中,字符串是一组用双引号括起来的字符序列,例如:”Hello World”。字符串是Java中的常见数据类型之一,类型名为String。 2. 如何声明字符串类型变量? 在 Java 中声明字符串类型变量,必须使用关键字String,例如: String st…

    Java 2023年5月26日
    00
  • Java中指定时区的3种方法

    当我们在Java程序中处理时间的时候,常常会遇到需要指定时区的情况。正确地指定时区可以保证时间的正确性和跨时区的可靠性。以下是Java中指定时区的3种方法。 方法一:使用TimeZone类 Java中的TimeZone类提供了各种不同的时区,我们可以使用它来指定时区。常用的有如下几个方法: getTimeZone(String ID):根据时区ID获取一个T…

    Java 2023年5月20日
    00
  • java中List集合及其实现类的方法详解

    Java中List集合及其实现类的方法详解 什么是List集合? List集合是Java中最常用的集合之一,它可以存储有序、可重复的数据。 List实现类 Java中常见的List实现类有3种: ArrayList LinkedList Vector 其中,Vector常用于多线程并发访问的场景中,由于其性能较慢,因此本文不再赘述。下面详细讲解ArrayLi…

    Java 2023年5月18日
    00
  • java实现文件上传功能

    现在我会为您提供一个详细的java实现文件上传功能的攻略。包括需要用到的技术和代码示例。 技术所需 1. HTML表单 文件上传需要 HTML 表单,因为文件上传是通过 HTTP POST 请求提交的。 表单应该具有:enctype=”multipart/form-data” 属性。 2. Servlet API Servlet API提供了上传文件的功能,…

    Java 2023年5月20日
    00
  • java实现系统捕获异常发送邮件案例

    这里为您提供java实现系统捕获异常发送邮件的完整攻略。 1. 引入依赖 首先,在你的项目中需要引入邮件发送相关的依赖,例如Apache Commons Email等。如果你使用Maven进行依赖管理,可以添加以下依赖: <dependency> <groupId>org.apache.commons</groupId> …

    Java 2023年5月27日
    00
  • Java多线程执行处理业务时间太久解决方法代码示例

    针对你提出的问题,我会给出一份详细讲解“Java多线程执行处理业务时间太久解决方法代码示例”的完整攻略,过程中会包含以下几个部分的内容: Java多线程执行处理业务时间太久的原因 解决Java多线程执行处理业务时间太久的解决方案 代码示例 为了更好的与你展开对话,接下来我会就每个部分分别进行详细说明。 Java多线程执行处理业务时间太久的原因 在Java多线…

    Java 2023年5月18日
    00
  • 什么是finalize()方法?

    finalize()方法是Object类中定义的一个方法,用于在垃圾回收器回收对象前执行一些清理操作。当一个对象变成垃圾时,垃圾回收器会自动调用该对象的finalize()方法,但是并不保证会一定被调用。 下面是finalize()方法的使用攻略: 1. 方法定义 finalize()方法的定义如下: protected void finalize() th…

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