当前位置: 首页 > news >正文

网站开发行业新闻地推平台

网站开发行业新闻,地推平台,广州网络推广万企在线,商务网站建设PDF下载一、MD5 加密算法 MD5(Message Digest Algorithm 5)是一种常用的哈希函数,用于将任意长度的数据进行不可逆的加密处理。MD5 可以将输入的任意长度的数据转换为一个128位(16字节)的哈希值,通常表示为32个十…

一、MD5 加密算法

MD5(Message Digest Algorithm 5)是一种常用的哈希函数,用于将任意长度的数据进行不可逆的加密处理。MD5 可以将输入的任意长度的数据转换为一个128位(16字节)的哈希值,通常表示为32个十六进制数字。

MD5 的特点

  1. 不可逆性:MD5 加密是不可逆的,即无法从加密后的结果还原出原始数据。
  2. 固定长度输出:不论输入数据的长度如何,MD5 始终输出固定长度的哈希值
  3. 高速度:MD5 的计算速度较快。

虽然MD5能够对数据加密,但已被证明存在多种破解方式。常见的破解方法有彩虹表攻击碰撞攻击。所以不建议单独使用 MD5 进行加密。

彩虹表攻击: 彩虹表是一种预计算的哈希值与明文密码的映射表。攻击者通过比对MD5哈希值与彩虹表中的条目,快速找到对应的明文。

碰撞攻击:MD5易受碰撞攻击,即两个不同的输入(如文本、密码)生成相同的哈希值。攻击者可以构造特定数据,生成与目标哈希值相同的伪造数据。如果输入的信息得到的哈希值与密码的哈希值相同,那么这个密码就别破解了。

因此会将数据进行加盐加密,加盐加密是一种增强密码存储安全性的技术,通过为每个用户的密码添加一个随机字符串(称为“盐”),再对组合后的字符串进行哈希处理。这种方法可以有效防止彩虹表攻击和字典攻击。

盐值通常是一个随机的、唯一的字符串,与密码拼接后再进行哈希运算。例如:

  • 原始密码:password123
  • 盐值:a1b2c3d4
  • 加盐后输入:password123a1b2c3d4
  • 哈希结果:哈希函数(password123a1b2c3d4)

加盐的优势

  • 即使两个用户使用相同的密码,由于盐值不同,哈希结果也不同。
  • 攻击者无法直接使用预计算的彩虹表,因为盐值增加了破解难度。

二、加盐加密算法

加密思路

盐值(唯一的字符串,可用UUID 生成) +  数据 (MD5 加密后的数据) = 最终存入数据库的加密数据

验证数据思路

  1. 获取数据库加密数据
  2. 取出加密数据的盐值
  3. 盐值 + 待验证数据(MD5 加密后)=  待验证数据最终结果
  4. 待验证数据 与 数据库中的加密数据对比,相等则是正确的,否则是错误的
package com.kjz.utils.common;import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;import java.util.UUID;public class PasswordUtils{/*** 1.加盐并生成最终的密码* @param password 明文的密码* @return 最终生成的密码*/public static String encrypt(String password){//a.产生盐值//UUID.randomUUID()会生成32位数字+4位-,是随机的唯一的,将4位-去掉就得到32位数字的盐值String salt = UUID.randomUUID().toString().replace("-","");//生成加盐后的密码(需要使用MD5)String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());//返回最终的密码格式return salt + "$" + saltPassword;}/*** 2.加盐并生成最终密码格式(方法一的重载),区别于上面的方法:这个方法是用来解密的,给定了盐值,生成一个最终密码,后面要和正确的最终密码进行比对* @param password 需要验证的明文密码* @param salt* @return*/public static  String encrypt(String password, String salt){//1.生成一个加密后的密码String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());//2.生成最终的密码(待验证)String finalPassword = salt + "$" + saltPassword;return finalPassword;}/*** 3.验证密码* @param inputPassword  登录用户输入的明文密码* @param finalPassword  数据库中实际的最终密码格式* @return*/public static boolean check(String inputPassword, String finalPassword){//首先判断这两个参数到底有没有值,数据库中的最终密码是不是65位if(StringUtils.hasLength(inputPassword) && StringUtils.hasLength(finalPassword)&& finalPassword.length() == 65){//a.首先从最终的密码中得到盐值//使用$将finalPassword划分成两个部分,前面的32位的部分就是盐值//注意:这里的$是被认为是一个通配符,所以要转义一下String salt = finalPassword.split("\\$")[0];//b.使用之前加密的方法,生成最终的密码格式(待验证)String checkPassword = encrypt(inputPassword,salt);if(checkPassword.equals(finalPassword)){return true;}}return false;}
}

 

 

http://www.wooajung.com/news/32323.html

相关文章:

  • 手机网站微信支付接口开发教程百度应用搜索
  • 房产o2o网站建设凡科建站手机版登录
  • 网站定制报价表免费引流推广工具
  • 中小企业网站建设报告ai智能搜索引擎
  • 青岛网站建设在哪近三天的国内新闻
  • 小程序怎么做优惠券网站杭州seo建站
  • 新型干法水泥工艺设计计算及实用技术 久久建筑网汕头seo外包机构
  • 公司网站百度搜索的描述怎么做百度如何投放广告
  • 电子商务公司营业执照经营范围seo网络推广有哪些
  • dede游戏网站模板it培训机构学费一般多少
  • 网站视频播放代码windows优化大师怎么卸载
  • 上杭县城乡规划建设局网站汕头seo建站
  • 西宁做网站公司排名深圳网站设计小程序
  • 保定网站建华夏思源培训机构官网
  • 富平做网站百度seo优化排名如何
  • 高唐企业建网站服务商网站搭建需要多少钱?
  • 建设部门网站查询seo站内优化技巧
  • 泰坦科技网站建设深圳网站设计专业乐云seo
  • 网站添加flash迅雷bt磁力链 最好用的搜索引擎
  • 建设数字官方网站碉堡了seo博客
  • 根目录下两个网站怎么做域名解析新闻稿发布
  • 网站运营策划提案谷歌推广app
  • 如何做网站内部优化码迷seo
  • 做网站 前途深圳市企业网站seo营销工具
  • wordpress 批量设置标签seo实战技术培训
  • wordpress用了什么框架镇江百度关键词优化
  • 域名解析网站建设每日新闻简报
  • 网站建设与管理教案吉林网络推广公司
  • 成都企业如何建网站今日头条号官网
  • 呼和浩特城乡建设委员会的网站写一篇软文1000字