java编程下字符串的16位,32位md5加密实现方法

Java编程下字符串的16位、32位MD5加密实现方法

MD5(Message-Digest Algorithm 5)是一种哈希算法,常用于确保文件完整性以及验证数据传输完整性。MD5加密后,得到的结果是一个128位(32个十六进制字符)的字符串,可以选择后16位或者后32位作为加密结果。在Java编程中,我们可以使用Java自带的MessageDigest类,来进行字符串的MD5加密和解密。

实现方法

以下是Java编程下字符串的16位、32位MD5加密实现方法:

1. 16位MD5加密

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

public class MD5Utils {

    public static String encrypt16(String source) {
        return encrypt32(source).substring(8, 24);
    }

    public static String encrypt32(String source) {
        StringBuilder result = new StringBuilder();
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(source.getBytes());
            byte[] bytes = md.digest();
            for (byte b : bytes) {
                String hex = Integer.toHexString(b & 0xff);
                if (hex.length() == 1) {
                    result.append("0");
                }
                result.append(hex);
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return result.toString();
    }

}

2. 32位MD5加密

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

public class MD5Utils {

    public static String encrypt32(String source) {
        StringBuilder result = new StringBuilder();
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(source.getBytes());
            byte[] bytes = md.digest();
            for (byte b : bytes) {
                String hex = Integer.toHexString(b & 0xff);
                if (hex.length() == 1) {
                    result.append("0");
                }
                result.append(hex);
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return result.toString();
    }

}

示例说明

下面是针对以上代码的使用示例:

示例一:16位MD5加密

public class Main {

    public static void main(String[] args) {
        String source = "hello, md5!";
        String encrypt16 = MD5Utils.encrypt16(source);
        System.out.println("source: " + source + ", encrypt16: " + encrypt16);
    }

}

输出结果:

source: hello, md5!, encrypt16: 2a9f1a8dce5080d2

示例二:32位MD5加密

public class Main {

    public static void main(String[] args) {
        String source = "hello, md5!";
        String encrypt32 = MD5Utils.encrypt32(source);
        System.out.println("source: " + source + ", encrypt32: " + encrypt32);
    }

}

输出结果:

source: hello, md5!, encrypt32: c88dceb15553a851a7d1a5c8df6b20e0

总结

以上是Java编程下字符串的16位、32位MD5加密实现方法,可以通过调用相应的方法来实现字符串MD5加密。在实现过程中,主要通过Java自带的MessageDigest类来实现,以及通过转换字节数组和十六进制字符对字符串进行转换。实际开发中,需要根据实际需求选择相应的加密方法,并且需要注意加密结果的长度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java编程下字符串的16位,32位md5加密实现方法 - Python技术站

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

相关文章

  • jsp中page指令用法详解

    下面是 “jsp中page指令用法详解”的完整攻略。 什么是Page指令? Page指令是JSP页面的一个必需元素。它告诉JSP引擎关于JSP页面的特定信息。Page指令以<%@ page %>的格式来表示。 Page指令的属性 Page指令有以下属性: language:指定JSP页面所使用的脚本语言。默认为Java。例如:language=”…

    Java 2023年6月15日
    00
  • 常见的Java代码混淆工具有哪些?

    常见的Java代码混淆工具有以下几种: ProGuard: ProGuard 是一款开源的Java代码混淆工具,通过删除未使用的类、字段、方法和属性,重命名它们,使得反编译后的代码难以阅读和理解。使用方法如下: 1.1. 首先下载并安装 ProGuard 工具,可以从官方网站 https://sourceforge.net/projects/proguard…

    Java 2023年5月11日
    00
  • Jackson序列化丢失泛型的解决

    在Java中,使用Jackson库进行序列化和反序列化是非常常见的。然而,当我们使用泛型时,Jackson序列化可能会丢失泛型信息,导致反序列化时出现问题。在本文中,我们将详细讲解如何解决Jackson序列化丢失泛型的问题,并提供两个示例来说明如何使用这些方法。 问题描述 当我们使用泛型时,Jackson序列化可能会丢失泛型信息。例如,考虑以下示例: pub…

    Java 2023年5月18日
    00
  • Java实现递归查询树结构的示例代码

    Java实现递归查询树结构的示例代码的攻略包括以下几个步骤: 定义树结构Node类 首先需要定义一个Node类来存储树节点的相关信息,例如节点id、父节点id、节点名称等。Node类的定义如下: public class Node { private String id; // 节点id private String parentId; // 父节点id p…

    Java 2023年5月23日
    00
  • tomcat部署java web项目遇到的问题及解决方法

    Tomcat部署Java Web项目遇到的问题及解决方法 Tomcat是非常常用的Java Web服务器,但在部署Java Web项目时,也经常会遇到一些问题。本篇攻略将讲解一些可能遇到的问题及解决方法,希望对大家有所帮助。 问题一:Tomcat启动出错,指定端口已被占用 在启动Tomcat时,可能会遇到指定的端口已被占用的情况。这时候,需要找到占用该端口的…

    Java 2023年6月2日
    00
  • Java8之Stream流代替For循环操作

    让我来为你详细讲解“Java8之Stream流代替For循环操作”的完整攻略。 概述 Stream是Java8中引入的一种处理数据集合的新特性,可以被用来代替传统的for循环操作,能够提高代码的可读性和运行效率。 Stream入门 首先需要对基本的Stream概念做一些了解。 Stream是数据的一种抽象,它不是一种数据结构,不保存数据,而是提供一个数据集合…

    Java 2023年5月26日
    00
  • java中SpringBoot 自动装配的原理分析

    下面我会为您详细讲解“Java中SpringBoot自动装配的原理分析”的完整攻略。 SpringBoot自动装配原理分析 SpringBoot自动装配是SpringBoot的核心特性之一,使得我们可以快速地构建出基于Spring的Web应用。自动装配的原理就是SpringBoot在应用启动时,通过解析项目中的依赖关系以及类注解等元数据信息,来完成应用中各个…

    Java 2023年5月19日
    00
  • 分析jackjson的安全漏洞CVE-2019-14379

    分析Jackjson的安全漏洞CVE-2019-14379可以通过以下几个步骤: 1.了解CVE-2019-14379漏洞的背景和影响 CVE-2019-14379是一个由Jackson-databind 库的反序列化漏洞引发的安全问题。这种漏洞可以让攻击者远程执行任意代码,从而导致服务器遭到攻击、数据丢失或泄露。 2.检查自己的应用程序是否受到漏洞的影响 …

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