md5加密算法-程序员宅基地

技术标签: java基础  安全  

md5是什么?

md5是一种信息摘要算法(message-digest algorithm 5 ),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用来确保信息传输完整一致性。

特点

  • 不可逆

                知道密文和加密方式,无法反向计算出原密码

                但是有md5破解网站,专门查询MD5码

撞库:原理是:通过建立大型的数据库,把日常的各种句子通过md5加密成为密文,不断积累更新大量句子,放在庞大的数据库里;然后,有人拿了别人的密文,想查询真实的密码,就需要把密文拿到这个数据库的网站(免费MD5加密解密:https://md5.cn/)去查询。

  • 长度固定

        任意长度的数据,算出来的md5值长度都是固定的

  • 强抗碰撞

        想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

  • 容易计算

        原理通俗易懂

  • 细微性(高度离散性)

       对原数据进行任何改动,都会有很大的变化

               

md5的用途

1.防止看到明文 

        因为密码存储到数据库后已经被加密了,即使不法分子拿到数据库中存储的用户密码的值,也无法知道正确的密码。

2.防止抵赖(数字签名)

        将文件加密,传输一个MD5值,如果被修改文件中的内容,对文件重新计算发现md5值不一致,证明中途被篡改。

3.文件上传

4.文件完整性验证

http://t.csdn.cn/Jq1SD

md5加盐

密码+salt值(salt值可以是随机字符串) 再加密

如:密码为123 特定字符串abc        用“12345abc”这个字符串加密

原理

获取md5对象,将目标字符串转换成字节数组,byte[] md5Bytes = md5.digest(byteArray);将字节数组加密,若字节数组长度小于16,转换成字符串StringBuffer,使用append做补0操作。

1.获取信息摘要对象:md5

通过信息摘要单例的构造函数获取:

MessageDigest md5 = MessageDigest.getInstance("MD5");

2.信息摘要对象是对字节数组进行摘要的,所以先获取字符串的字节数组.

byte[] bytes = str.getBytes();

3.信息摘要对象(md5)对字节数组进行摘要,得到摘要字节数组:

byte[] digest = md5.digest(bytes);

4.把摘要数组中的每一个字节转换成16进制,并拼在一起就得到了MD5值. 


原文链接:http://t.csdn.cn/MP7LA

实现

package com.org.code;

import java.security.MessageDigest;

public class EncodeMD5 {

    public static String string2MD5(String str){
        MessageDigest md5 = null;
        try{
            md5 = MessageDigest.getInstance("MD5");//获取加密算法对象
        }catch (Exception e){
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
      //将目标字符串转换成字节数组
        char[] charArray = str.toCharArray();
        byte[] byteArray = new byte[charArray.length];

        for (int i = 0; i < charArray.length; i++)
            byteArray[i] = (byte) charArray[i];
    	
      //将字节数组加密
        byte[] md5Bytes = md5.digest(byteArray);//对字节数组进行摘要
        //用keystr.append  字符串定义时需要用可变的字符串StringBuffer
        StringBuffer haxValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++){
            //0xff是16进制数,这个刚好8位都是1的二进制数,而且转成int类型的时候,高位会补0
            int val = ((int) md5Bytes[i]) & 0xff;//转换成16进制
//在&正数byte值的话,对数值不会有改变 在&负数数byte值的话,对数值前面补位的1会变成0,
            if (val < 16){
                haxValue.append("0");//位数不够,高位补0
            haxValue.append(Integer.toHexString(val));
        }
        return haxValue.toString();
    }
    public static void main(String[] args) {
        String s = "humane_";
        System.out.println("原始:" + s);
        System.out.println("MD5后:" + string2MD5(s));
    }
}

应用

用户注册——密码加密存储

//调用EncodeMD5中的方法
String password2 =EncodeMD5.string2MD5(password);
//直接存储加密后的字符串
user.setPassword(password2);

用户登录——通过加密规则转换成密文后在跟数据库中存在的密码比对。

//将表单得到的密码加密
String password = request.getParameter("password");
String password2=EncodeMD5.string2MD5(password);
//拿到数据库中存储的密码与现输入的密码比对
User user =UserDAOFactory.getUserDAO().findUser(username);
if(user.getPassword().equals(password2)){//相等就跳转到首页
    response.sendRedirect("index.jsp");
}

 来源于:

百度安全验证

http://t.csdn.cn/To3q8

http://t.csdn.cn/v6Cnm

http://t.csdn.cn/MP7LA

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LUOZONGW/article/details/127399400

智能推荐

AfxBeginThread的介绍/基本用法和Window多线程使用详解_afxbeginthread()可以调用多核吗-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏8次。AfxBeginThread 用户界面线程和工作者线程都是由AfxBeginThread创建的。现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和过程:用户界面线程的AfxBeginThread 用户界面线程的AfxBeginThread的原型如下:CWinThread* AFXAPI A_afxbeginthread()可以调用多核吗

Fisher判别:理解数据分类的经典方法

在机器学习和统计分类的领域中,Fisher判别(也称为Fisher线性判别分析)是一种非常重要的方法,旨在从数据中提取重要特征,以实现对样本的分类。即Fisher判别分析(Fisher Discriminant Analysis, FDA)是一种经典的线性分类方法,用于特征提取和数据降维,特别是在模式识别和机器学习领域中。这种方法由统计学家和生物学家罗纳德·费舍尔在1936年提出,至今仍广泛应用于各种数据分析任务中。

《前端面试题》- TypeScript - TypeScript的优/缺点

问题简述TypeScript的优/缺点答案优点增强了代码的可读性和可维护性包容性,js可以直接改成ts,ts编译报错也可以生成js文件,兼容第三方库,即使不是ts编写的社区活跃,完全支持es6缺点增加学习成本增加开发成本,因为增加了类型定义需要编译,类型检查会增加编译时长,语法和类型系统复杂的话时间特别特别长eval和new Function()这种操作类型系统管不到...

.NET 实现实体对象深拷贝(克隆/复制)的几种方法_net 对象复制-程序员宅基地

文章浏览阅读6.7k次。浅拷贝:指对象的字段被拷贝,而字段引用的对象不会被拷贝,拷贝对象和原对象仅仅是引用名称有所不同,但是它们共用一份实体。对任何一个对象的改变,都会影响到另外一个对象。大部分的引用类型,实现的都是浅拷贝,引用类型对象之间的赋值,就是复制一个对象引用地址的副本,而指向的对象实例仍然是同一个。深拷贝:指对象的子段被拷贝,同时字段引用的对象也进行了拷贝。深拷贝创建的是整个源对象的结构,拷贝对象和原对象相..._net 对象复制

StarRocks x Paimon 构建极速实时湖仓分析架构实践

当前 StarRocks x Paimon 的能力主要包括:支持各类存储系统,包括 HDFS 以及对象存储 S3/OSS/OSS-HDFS支持 HMS 以及阿里云 DLF 元数据管理系统支持 Paimon 的 Primary Key 和 Append Only 表类型查询支持 Paimon 系统表的查询,常见例如 Read Optimized 表,snapshots 表等支持 Paimon 表和其他类型数据湖格式的关联查询支持 Paimon 表和 StarRocks 内表的关联查询。

Java设计模式 _创建型模式_原型模式(Cloneable)

1、原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能比较好。一般对付出较大代价获取到的实体对象进行克隆操作,可以提升性能。(2)、复写clone方法(当前对象本身可以不复写,如果当前对象被继承,需要clone子类,则必须要复写)(1)、需要克隆的实体类实现Cloneable接口。可以看出,完整的复制了属性,且并不是同一个对象。

随便推点

【深度学习 | 卷积&haar】面部表情识别系统|原理详解&附详细案例&源码_面部识别csdn-程序员宅基地

文章浏览阅读2.2k次,点赞85次,收藏15次。在微表情识别系统的研究中,对微表情的准确理解是至关重要的。本章将深入探讨微表情的定义、与常规表情的区别以及微表情的分类,为读者提供深入了解微表情的基础知识。微表情是指人类在极短时间内、难以察觉的情感表达。这种表达往往仅持续数毫秒到数百毫秒,通常被认为是一种情感的真实显露,不受到个体的自我控制。微表情通常表现在面部的微小运动上,例如眼神的变化、嘴角的抽动等。_面部识别csdn

【编译技术实验】词法分析器(C++实现)_char *typevalues[]= {"keyword", "indentifier", "co-程序员宅基地

文章浏览阅读607次。编译技术实验,词法分析器_char *typevalues[]= {"keyword", "indentifier", "constant", "operator", "deli

三维模型3DTile格式轻量化纹理压缩技术方法浅析_3dtiles纹理-程序员宅基地

文章浏览阅读481次。三维工厂K3DMaker是一款三维模型浏览、分析、轻量化、顶层合并构建、几何校正、格式转换、调色裁切等功能专业处理软件。可以进行三维模型的网格简化、纹理压缩、层级优化等操作,从而实现三维模型轻量化。轻量化压缩比大,模型轻量化效率高,自动化处理能力高;采用多种算法对三维模型进行几何精纠正处理,精度高,处理速度快,超大模型支持;优秀数据处理和转换工具,支持将OSGB格式三维模型转换为3DTiles等格式,可快速进行转换。_3dtiles纹理

WIFI模块接入测试_+cwjap:4-程序员宅基地

文章浏览阅读1.6k次。WIFI测试1)发送:AT+CIPSTART=“TCP”,“192.168.8.102”,8080返回:no ipERROR说明:WiFi未接入路由器,没入网2)AT+CWJAP=“HUAWEI_B316_BF67”,“xwck%%1609”WIFI CONNECTEDWIFI GOT IPOK说明:WiFi已入网并已分配IP3)AT+CIPSTART=“TCP”,“192.168.8.102”,8080ALREADY CONNECTEDERRORAT+CIPSTART=“TCP”_+cwjap:4

python列表每个元素同增同减和列表元素去空格_x*2 for x in var-程序员宅基地

文章浏览阅读5.8k次,点赞2次,收藏5次。import osvar = [1, 2, 3]data = [x*2 for x in var]print (data)two = [[i, i**2] for i in var]print (two)three = [[i, i+i, i**3] for i in var]print (three)fruit = [' banana', ' loganberry ',..._x*2 for x in var

截拳道拳理应用要决-程序员宅基地

文章浏览阅读80次。截拳道拳理应用要决一、协调  协调是指有机体各部分活动在时间和空间中相互配合,合理有效地完成动作的能力。每一技法都是周身协调配合而产生的,实战效率也是由速度、耐力、力量、灵活性以及准确程度等共同的协调配合而决定。李小龙说:“协调可谓是一种特具的能力,使一个人得以有效而柔畅地使用其全身所有机能和内在潜能做其所欲做的动作。”努力提高协调能力,在截拳道训练整个过程中都是十分重要的一项内容,所以应..._截拳道物理公式

推荐文章

热门文章

相关标签