1、MD5加密简介

在用户注册是时候,通常使用MD5加密,先看下什么是MD5加密,以及加密过程?

MD5全名Message-Digest Algorithm 5(信息-摘要算法)是一种不可逆的加密算法。

2、MD5有以下特性:

压缩性:任意长度的数据,算出的MD5值长度都是固定的。

容易计算:从原数据计算出MD5值很容易。

抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

3、MD5加密有哪些问题?

用户注册的时候保存的是用户输入密码的散列值,而不是保存密码。

这样在用户登录的时候,将用户的密码使用散列算法计算一下散列值,和数据库注册的时候保存的散列值比较一下。如果相同就认为登录成功。

其实这样是不安全的,只要把经常出现的密码和对应的散列值保存起来,保存到数据库。只要拿到用户密码的散列值,只要用户的密码不是非常复杂的,就很有可能把散列值的原始密码找出来。这样黑客就会继续撞库。

此时我们可以使用加盐算法

在用户注册的时候,生成一个随机的复杂字符串做为"盐",这个盐也保存在数据库里面。同时把用户输入的密码加上这个盐,再计算出散列值保存在数据库中。这样在用户登录的时候,只要把用户输入的密码和盐连接起来,计算出一个散列值,再和数据库中的散列值比较一下,就可以知道密码是不是正确的了。由于盐比较复杂,导致用户的密码和盐连接在一起的字符创更加复杂。这样计算出的散列值就很难反向推算出原始的密码了。即使用户密码很简单,黑客拿到了散列值,也无法破解密码。也没发去别的网站尝试撞库了 。

4、相关代码自测

public class MD5Utils {public static String getMD5Str(String str) throws NoSuchAlgorithmException {MessageDigest d = MessageDigest.getInstance("md5");// 这儿采用的是加盐的方式return Base64.getEncoder().encodeToString(d.digest((str + Constant.SALT).getBytes()));}public static void main(String[] args) throws NoSuchAlgorithmException {String s = getMD5Str("123456");System.out.println(s);}
}

【详解】MD5加密真的安全吗?不安全有什么解决办法?相关推荐

  1. html子布局不超出父布局,详解flex布局中保持内容不超出容器的解决办法

    在移动端,flex 布局很好用,它能够根据设备宽度来自动调整容器的宽度,用起来很方便,已经越来越离不开它,但是最近在做项目的时候发现一个问题. 就是在一个设置了 flex:1 的容器中,如果文字很长, ...

  2. MD5碰撞后时代,MD5加密真的安全吗

    MD5是一种哈希函数,曾一度被认为是非常安全的,并且在国外被广泛运用.直到王小云教授的研究证明利用MD5算法的磕碰能够严重威胁信息体系安全,因此不得不做很多的重新思考.那么,MD5碰撞后时代,我们常用 ...

  3. python无法使用1号gpu_详解tensorflow2.x版本无法调用gpu的一种解决方法

    最近学校给了一个服务器账号用来训练神经网络使用,服务器本身配置是十路titan V,然后在上面装了tensorflow2.2,对应的python版本是3.6.2,装好之后用tf.test.is_gpu ...

  4. 【上】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS

    此文章转载来源于http://blog.csdn.net/tenfyguo/article/details/40922813点击打开链接 一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码 ...

  5. 安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS

    一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. 对称加解密的过程如下: 发送端和接收端首先要共享相同的密钥k(即通信前双方都需要知道对应的密 ...

  6. 一文详解 MD5 信息摘要算法

    对于软件研发人员来说 MD5 不是一个陌生的词汇,平时的软件研发中,经常使用 MD5 校验消息是否被篡改.验证文件完整性,甚至将MD5当作加密算法使用. MD5虽不陌生,但不是所有研发人员都了解其算法 ...

  7. C/C++编译和链接过程详解 概述 (重定向表,导出符号表,未解决符号表)

    详解link  有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错 ...

  8. 固实压缩文件容易损坏_文件解压失败与压缩文件文件已经损坏的解决办法

    压缩文件以减少文件大小和提高传送速度的特点而广受用户欢迎,压缩文件时一般需要电脑安装压缩软件.我们在解压的过程中电脑有的时候会提示:此解压失败或压缩文件文件已经损坏?下面小编就为大家整理了解压文件出错 ...

  9. 计算机二级准考证解压缩失败 文件损坏,文件解压失败与压缩文件文件已经损坏的解决办法...

    压缩文件以减少文件大小和提高传送速度的特点而广受用户欢迎,压缩文件时一般需要电脑安装压缩软件.我们在解压的过程中电脑有的时候会提示:此解压失败或压缩文件文件已经损坏?下面小编就为大家整理了解压文件出错 ...

  10. 使用tar解压gz文件出现 “not in gzip format”错误解决办法

    我在解压.gz文件时使用的下面命令: tar -zxvf *.tar.gz 然后出现下面的提示: gzip: stdin: not in gzip format tar: Child returned ...

最新文章

  1. IntelliJ IDEA导入JDK出现The selected directory is not a valid home for JDK问题的解决方法
  2. Spring Boot构建RESTful API与单元测试
  3. BZOJ-1082-[SCOI2005]栅栏(二分+dfs判定)
  4. 华南理工大学网络教育计算机答案,计算机应用基础--随堂练习2019春华南理工大学网络教育答案...
  5. Nacos如何避免并发读写冲突问题?
  6. 巡回沙龙_美浮特全国巡回沙龙第一期结束撒花!
  7. python与机械教育初探_Python公开课-机械学习之手写识别
  8. keras 多输出问题
  9. java string 对象地址_Java中String对象的存储位置(学习笔记)
  10. json 和 数组的区别
  11. 奔奔 LPC1788 入门学习笔记系列之---LPC1788时钟配置
  12. PayPal提现到美国账户收35美元怎么办?最新3种解决办法!
  13. 【Java实战小项目】考试系统
  14. NTL密码算法开源库-大整数ZZ类(三)
  15. 微信开放平台开发 微信登录
  16. 网站SEO优化基本流程是什么?看完就明白了!
  17. LightningChart数据可视化工具图形控件教程24-Bands(数据带)
  18. Android高级架构师系统学习——Android-音频可视化,程序员怎样优雅度过35岁中年危机
  19. 使用kettle采集excel表格中的数据
  20. bpmn 文件 服务器部署,Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题...

热门文章

  1. 谷歌浏览器安装插件的方法
  2. termux安装mongodb
  3. Android的当前应用启动第三方应用(跨软件启动页面)
  4. 学习sift算法的原理和步骤_大白话人工智能算法-第32节集成学习之通俗理解XGBoost原理和过程
  5. Android Socket 服务器ServerSocket发数据到客户端
  6. 安装VMware16教程
  7. 火狐浏览器模拟发送post请求
  8. vue 富文本编辑器 —— wangEditor
  9. 10月编程语言排行榜:Java第一无悬念,老戏骨重回前三!
  10. Windows下硬盘存储情况可视化工具--WinDirStat