【快速上手系列】使用MD5加密对密码进行加密

news2025/7/29 14:17:31

【快速上手系列】使用MD5加密对密码进行加密

介绍

MD5加密

  • Message Digest Algorithm MD5(中文名为消息摘要算法第五版)
  • 应用程序的密码通常不会明文保存,会使用各种各样的加密算法对密码进行加密
  • MD5算法相对来说较为安全。
  • 初始的MD5算法是由C语言实现
  • Java版本的MD5算法是根据C语言的MD5算法演变而来的

安全访问认证

当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。这可以避免用户的密码被具有系统管理员权限的用户知道。

MD5将任意长度的“字节串”映射为一个128bit的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字节,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。

使用

使用MD5工具类,调用即可

MD5工具类

MD5Util.java

package com.r.utils;

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

public class MD5Util {
    /**
	    * 对字符串md5加密(小写+数字)
	    *
	    * @param str传入要加密的字符串
	    * @return MD5加密后的字符串
	    */
    public static String getMD5(String source) {
        try {
            // 生成一个MD5加密计算摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 计算md5函数
            md.update(source.getBytes());
            // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
            // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
            return new BigInteger(1, md.digest()).toString(16);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
	    * 对字符串md5加密(大写+数字)
	    *
	    * @param str传入要加密的字符串
	    * @return MD5加密后的字符串
	    */
    public static String toMD5(String source) {
        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        try {
            byte[] btInput = source.getBytes();
            // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字节更新摘要
            mdInst.update(btInput);
            // 获得密文
            byte[] md = mdInst.digest();
            // 把密文转换成十六进制的字符串形式
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

测试类

MD5Test.java

package com.r.utils;

public class MD5Test {

	public static void main(String[] args) {
		//设置一个密码
		String password = "123456";
		String pwd = MD5Util.toMD5(password);
		System.out.println("MD5加密格式(大写+数字):" + pwd);
		System.out.println("MD5加密格式(小写+数字):" + MD5Util.getMD5(password));
		
		//模拟后端数据库密码经过MD5加密
		String pwd_database = MD5Util.toMD5("123456");
		//模拟前端用户输入密码经过MD5加密
		String pwd_input = "123456";
		//打印
		System.out.println("前端用户输入和后端数据库MD5加密比对:" + MD5Util.toMD5(pwd_input).equals(pwd_database));
	}

}

运行结果

请添加图片描述

应用

可以看到密码明文一致的时候,加密的信息也是一致的,所以可以后端保存加密信息,然后将用户输入的密码明文进行MD5加密处理,来与后端数据库进行比对,作为一个简单的密码保护

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发微信小程序的流程_微信小程序开发的作用

小程序的快速发展和围绕其诞生的产业链逐步完善&#xff0c;更多的平台和流量开始参与到小程序的开发领域&#xff0c;推出属于平台的小程序接口。相较于传统的线下广告宣传模式&#xff0c;小程序的传播和推广拥有互联网便捷高效的属性。用户扫描二维码就能关注公众号&#xf…

【安全测试学习】自动化注入攻击之 FuzzDB和Burp 组合拳

一、FuzzDB 开源的应用程序模糊测试数据库&#xff0c;包含了各种攻击 payload 的测试用例集合。 主要功能&#xff1a; OS 命令注入 目录遍历 文件上传绕过 身份验证绕过 XSS SQL 注入 HTTP 头注入 CRLF 注入 NoSQL 注入等 还包含了一些用不同语言写成的 webshell 与常用的账…

什么是 MQ

MQ的概念 MQ &#xff08;Message Queue&#xff09;消息队列&#xff0c;是在消息传输过程中存储消息的容器。多用于分布式系统之间的通信。 队列是基础数据结构中 “先进先出” 的一种数据结构。 消息对列&#xff0c;指把要传输的数据消息放在队列中&#xff0c;用队列机制…

spring之基于p命名c命名空间的注入

文章目录前言一、p命名空间1.1、编写一个普通的Java类1.2、spring配置文件1.3、测试1.4、运行结果二、c命名空间2.1、编写一个普通的Java类2.2、spring配置文件2.3、测试2.4、运行结果总结前言 P命名空间注入&#xff1a; 目的&#xff1a;简化set方法注入 使用p命名空间注入的…

C++ 哈希表的总结与例题

文章目录CSTL哈希表设计哈希集合设计哈希映射哈希集合例题一&#xff1a;只出现一次的数字例题二&#xff1a;快乐数哈希映射例题一&#xff1a;两数之和例题二&#xff1a;两个列表的最小索引总和例题三&#xff1a;字符串中的第一个唯一字符设置键例题一&#xff1a;字母异位…

安全进阶:虚拟防火墙基础实验

实验拓扑 网络拓扑及IP编址如上图所示&#xff1b; 实验需求 PC2与Server2属于一个敏感的业务&#xff0c;这个业务的流量要求与防火墙上的其他流量完全隔离&#xff0c;使用虚拟防火墙技术实现这个需求&#xff1b; PC2要求能够访问Server2&#xff1b;PC2属于Trust域&#…

Exception in thread “main“ java.lang.UnsupportedOperationException解决办法

1.首先报错UnsupportedOperationException 是因为我们用的是 List<Integer> list1 Arrays.asList(2, 3, 5);这个方式获取的集合,该集合底层没有重写一些方法,所以报错 解决方案 定义新集合接收上一步的数据,然后用新集合来操作就行 package day01;import java.util.A…

元数据管理-解决方案调研二:元数据管理解决方案——Saas/内部解决方案(1)

Saas/内部解决方案 2.1、Data Galaxy 地址&#xff1a;The 360 Data Catalog for datagovernance - DataGalaxy 特点&#xff1a;实现数据治理最佳方式 1、理解业务数据并可以共享通用定义&#xff1b;即由团队成员共同维护定义业务术语词汇的知识库 2、统一企业数据字典&…

DolphinDB Python API 离线安装教程

出于安全考虑&#xff0c;通常生产环境与互联网隔离&#xff0c;因此无法使用 pip install 在线安装 DolphinDB Python API&#xff08;以下简称 Python API&#xff09;。本文介绍如何离线安装 Python API 环境&#xff0c;包括 conda 环境和 wheel 安装两种方式。用户可根据生…

RobotFramework 接口测试实战落地

目前我在负责一个APP的测试工作。在项目中使用 RobotFramework作为工具搭建接口自动化框架&#xff0c;进行接口自动化的工作。 本文将从我个人对接口测试和自动化框架的理解以及RobotFramework在实际项目中落地两个大方面进行讲解。 对接口测试的理解 浅谈接口自动化框架 …

图片批量转为PDF怎么转?这些方法亲测实用

你们平时在整理照片的时候&#xff0c;有把多张图片转为PDF文件的需求吗&#xff1f;我因为工作需要&#xff0c;会拍摄和存储很多照片&#xff0c;而且经常需要将这些照片归类&#xff0c;整合到一个PDF文件中。可能有的小伙伴还不知道多张图片转PDF怎么转&#xff1f;别着急&…

2022全球智慧城市大会 升哲科技:以人为核心推动智慧城市建设

11 月 15 日 至 16 日&#xff0c;“全球智慧城市大会 成都”在成都召开。此次会议主题为“人民 激活 城市”&#xff0c;与“全球智慧城市大会 巴塞罗那”同期举办&#xff0c;采用线上与线下结合模式&#xff0c;链接全球 80 多个国家 600 多座城市参会代表。升哲科技&am…

三冲IPO的思派健康如何承载腾讯的互联网医疗梦?

腾讯在互联网医疗领域的“大将”思派健康10月27日向港交所主板递交第三次上市申请&#xff0c;在2021年8月6日和2022年2月25日两次“折戟”港交所后&#xff0c;此次能否如愿以偿仍未可知。 我国当前正步入老龄化社会&#xff0c;慢性病人口增加&#xff0c;市场对医疗健康方面…

2000年-2020年31省市城乡收入差距泰尔指数

2000年-2020年31省市城乡收入差距泰尔指数 1、来源&#xff1a;统计NJ和各省NJ 2、时间区间为2000-2020年 3、指标包括&#xff1a;居民人均可支配收入、城镇家庭可支配收入、农村家庭可支配收入、总人口、城镇化率、城镇总人口、农村总人口、城镇总收入、农村总收入、总收…

CAS:73342-16-2,Azide-PEG-Hydroxy,N3-PEG-OH,叠氮PEG羟基

化学试剂叠氮-聚乙二醇-羟基&#xff0c;其英文名为Azide-PEG-Hydroxy&#xff0c;N3-PEG-OH&#xff0c;它所属分类为Azide PEG Hydroxyl PEG。 叠氮PEG羟基的分子量均可定制&#xff0c;有&#xff1a;叠氮-PEG 3400-羟基、N3-PEG 2000-OH、N3-PEG 1000-OH、叠氮-聚乙二醇 1…

17.Redis系列之快照RDB方式持久化

本文学习redis两大持久化技术之一&#xff1a;RDB&#xff08;redis database&#xff09;快照方式持久化备份与还原&#xff0c;以及RDB方式的优缺点 1. RDB相关配置 首先我们先简单了解下Redis7中RDB相关配置 // save <seconds> <changes> [<seconds> &…

Python理论之一 —— 数据读写

文章目录1. Excel1.1 openpyxl 模块1.1.1 打开表格、读取/获取信息1.1.1.1 打开表格、获取表格内sheet名&#xff1a;1.1.1.2 根据sheet名获取工作表1.1.1.3 获取表格的尺寸大小&#xff1a;尺寸大小指excel表格中的数据有几行几列1.1.1.4 获取表格内某个格子的数据&#xff1a…

电影《扫黑行动》观后感

上周看了电影《扫黑行动》&#xff0c;讲述三年扫黑除恶专项行动中的一个具体事件。 记得前几年&#xff0c;估计你也听过类似新闻&#xff0c;就是大学贷&#xff0c;学生贷等等系列&#xff0c;面向学生的贷款&#xff0c;借钱的人明知道&#xff0c;学生一般是没有偿还能力的…

在家每次开门都安心,在外也能芝麻开门——云米AI智能门锁Super 2体验

很多人都遇到过出门忘带钥匙的尴尬&#xff0c;好在如今有了智能门锁这种看家好工具&#xff0c;既可以通过密码、指纹等多种方式轻松开锁&#xff0c;又可以随时通过手机APP来查看异常情况&#xff0c;确实是现在居家必备的好东西。这个月我也把家里大门上不太好用的老锁&…

IPWorks WebSockets Delphi版

IPWorks WebSockets Delphi版 IPWorks WebSocket包括一组功能强大的组件&#xff0c;用于将WebSocket通信功能集成到Web、桌面和移动应用程序中。这些组件非常适合构建需要实时数据的Web连接应用程序&#xff0c;包括聊天、多人游戏、实时金融应用程序等。 IPWorks WebSockets功…