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

韩国有哪些专业做汽车的网站?大型营销型网站制作

韩国有哪些专业做汽车的网站?,大型营销型网站制作,南宁建站,网站开发项目风险哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 本期主要是给大家分析一下, 密码的如果加密存储的, 学习加盐算法的思想, 通过一个简单的案例, 即可快速学习. 一起来看看叭~ 适用于编程初学者,感兴趣的朋友们可以订阅&…

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ  


本期主要是给大家分析一下,  密码的如果加密存储的,  学习加盐算法的思想,  通过一个简单的案例, 即可快速学习.  一起来看看叭~


适用于编程初学者,感兴趣的朋友们可以订阅,查看其它 “Java知识”。

 

更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘ 


一、MD5 简介

MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够将任意长度的数据映射为固定长度的128位(16字节)哈希值。MD5常用于数据完整性校验和密码存储,但是 MD5 已经被破解了, 在安全性上就会大打折扣, 本篇主要学习加盐算法的思想,  后续也可以采用更为安全的加密算法(使用更强的哈希算法,如SHA-256或SHA-3),  针对数据加密的思想是一致的.

主要特点:

  1. 固定长度输出:无论输入数据的大小如何,MD5输出的哈希值始终为128位。
  2. 快速计算:MD5计算速度较快,适合处理大量数据。
  3. 碰撞问题:MD5容易出现碰撞,即不同的输入数据可能生成相同的哈希值,因此不适合用于需要高安全性的场合。
  4. 广泛应用:尽管不再安全,MD5仍在一些非安全敏感的场合使用,例如文件完整性校验。

虽然MD5的加密过程较为复杂,但总体上是通过一些步骤将任意长度的输入数据映射为固定长度的哈希值。由于其碰撞性问题,以及算法早已被破解, MD5在安全领域的应用逐渐被淘汰。

 本次采用 Jave 语言, 来给大家阐述算法思想.


二、加盐算法

“加盐”是一种用于增强密码存储安全性的技术,它通过在密码中添加额外的随机数据(即“盐”)来使密码的哈希值更加独特和安全。

加盐算法的步骤

  1. 生成盐值

    为每个用户生成一个随机的盐值(通常是一个固定长度的随机字符串,可以使用UUID)。这个盐值应该是唯一的,并且对于每个用户都不同。
  2. 组合密码和盐

    将用户输入的密码进行哈希加密后的值 + 生成的盐值结合。
  3. 二次哈希处理

    使用安全的哈希函数(如SHA-256、bcrypt、Argon2等)或 MD5 对组合后的字符串二次哈希处理,生成新的一个哈希值。
  4. 存储

    将盐值(随机值)和哈希值(密码)一起存储在数据库中。通常,盐值和哈希值会在同一行中保存。后续可以通过 (哈希加密(用户输入的密码) + 盐值) 进行二次哈希,  然后与数据库中的哈希值进行对比, 相同即可判断当前密码是正确的, 不同则反之, 所以这个盐值是比较重要的.

废话不多说, 直接上代码演示(MD5):

Java 中使用 MD5 加密, 需要在 pom.xml 文件 引入第三方工具包:

<!-- 编码解码加密⼯具包 MD5 加密--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency>

第一步:

创建一个 User 类, 来模拟数据库 User 表(在项目中, 也会使用一个类来描述数据库表)

/*** Created with IntelliJ IDEA.* Description: 采用当前类, 模拟数据库用户表* Author: 保护小周* Date: 2024-10-30* Time: 0:37*/
public class User {private String nickname; // 昵称private String username; // 用户名private String password; // 密码private String salt; // 盐值public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSalt() {return salt;}public void setSalt(String salt) {this.salt = salt;}@Overridepublic String toString() {return "User{" +"nickname='" + nickname + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +", salt='" + salt + '\'' +'}';}
}

第二步: 

要保持工具类之间的低耦合~ , 所以业务类传参即可.

封装工具类 MD5 

import org.apache.commons.codec.digest.DigestUtils;
/*** Created with IntelliJ IDEA.* Description: MD5 加密的工具类* Author: 保护小周* Date: 2024-10-29* Time: 23:48*/
public class MD5Util {/*** 传入原字符串可以得到 md5 加密的密文* @param str 明文* @return 密文*/public static String md5(String str) {return DigestUtils.md5Hex(str);}/*** 原密码进行 md5 加密 = 密文1* 密文1 + 拢动字符(盐值) = 密文2* 对密文 2 进行 md5 加密* @param str 明文* @param salt 盐值 (随机值)* @return 密文*/public static String md5Salt(String str, String salt) {return md5(md5(str) + salt);}
}

 封装工具类 UUID, 生成盐值

import java.util.UUID;/*** Created with IntelliJ IDEA.* Description:* Author: 保护小周* Date: 2023-08-07* Time: 17:26*/
public class UUIDUtil {/*** 生成一个 UUID (36位)* @return*/public static String uuid_36 () {return UUID.randomUUID().toString();}/*** 生成一个 UUID (32位), 去除 - * @return*/public static String uuid_32 () {return UUID.randomUUID().toString().replace("-","");}
}

第三步: 模拟新增用户, 登录用户

import java.util.HashMap;
import java.util.Map;/*** Created with IntelliJ IDEA.* Description:* Author: 保护小周* Date: 2024-10-30* Time: 0:47*/
public class Dome {// 模拟数据库存储 每一个 user 用户public static Map<String, User> userMap = new HashMap<String, User>();/*** 新用户注册* @param nickname* @param username* @param password* @return*/private static Boolean register(String nickname, String username, String password) {// 1. 密码 进行 MD5 + 加盐算法 加密/*  加密方式:*  原密码进行 md5 加密 = 密文1*  密文1 + 拢动字符(盐值) = 密文2*  对密文 2 进行 md5 加密*/// 1.1  盐值, 通过封装的 UUID工具类 随机生成String salt = UUIDUtil.uuid_32();// 1.2 通过封装的 MD5 工具类方法, 一步到位String md5Password = MD5Util.md5Salt(password, salt);System.out.println("注册密码加密后: " + md5Password);// 2. 存入 "数据库" userMap, key = username,  value = userUser user = new User();user.setNickname(nickname);user.setUsername(username);user.setPassword(md5Password); // 密码存储的是加密后的密文user.setSalt(salt); // 存储盐值, 以便于后续比较密码是否正确// 入库userMap.put(user.getUsername(), user);System.out.println(user);return true;}/*** 模拟用户登录* @param username* @param password* @return*/private static Boolean login(String username, String password) {// 1. 用户输入用户名及其密码, 数据来源于前端登录请求// 1.2 判断用户名是否已经注册, 根据用户名, 从 "数据库" 中获取User user = userMap.get(username);if (user == null) {System.out.println("用户名密码错误!"); // 前端反馈 , 用户不存在return false;}// 1.3 用户存在, 再判断密码是否正确// 对 password 进行 md5 加密得到 密码1 , 密码1 与 salt(盐值) 进行加密, 得到密码 2// salt , 是我们注册的时候记录在数据库中 user 的 salt 属性(也就是我们查询出的 user里面)String saltPassword = MD5Util.md5Salt(password, user.getSalt());// 因为, MD5值 是通过映射来产生的结果, 所以相同的密码, 产生的也是相同的密文System.out.println("登录密码进行加密后: " + saltPassword);return saltPassword.equals(user.getPassword());}public static void main(String[] args) {// 1. 创建新用户, 数据来源于前端的注册页面String nickname = "张三";String username = "1867134****";String password = "123456";// 2. 模拟注册新用户boolean ok = register(nickname, username, password);if (ok) {System.out.println(username + ": 注册成功! ");}// 3. 模拟用户登录, 数据来源于前端String loginUsername = "1867134****";String loginPassword = "123456";ok = login(username, password);if (ok) {System.out.println(username + ": 用户登录成功");}}
}

运行结果展示: 


好了,到这里,【MD5】密码加密之加盐算法 博主已经分享完了,通过一个简单的案例描述,  学习密码加盐的思想,   阐述较为基础,  希望对大家有所帮助,如有不妥之处欢迎批评指正。 

感谢每一位观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* 

遇见你,所有的星星都落在我的头上……

http://www.15wanjia.com/news/23131.html

相关文章:

  • 河南省级住房城乡建设主管部门网站互联网营销模式
  • 直播网站建设需要什么软件有哪些整站优化快速排名
  • 做网站推广哪家公司好百度seo关键词排名优化
  • 做exo小说的网站seo建站技术
  • 淘宝可以到哪些网站做推广营销软文
  • 做网站1008做网站 - 百度河南网站建设
  • 做网站公司排名百度seo入驻
  • 速卖通网站怎么做推广常用的网络营销方法及效果
  • 曲靖网站建设公司会计培训班一般收费多少
  • 德州金航网络公司网站建设合肥疫情最新消息
  • 四川网站建设网络营销现状分析
  • 有没有网站建设的教程查询域名网站
  • 深圳企业网站建设设计公司哪个平台可以免费发广告
  • 网站建设公司列表网aso优化软件
  • vps怎么做多个网站网站设计公司模板
  • 家庭做网站电商平台怎么做
  • 专门做肥料外贸的网站做好网络推广
  • 关于网站项目建设的申请有哪些可以免费推广的平台
  • 企业免费网站建设模板下载360推广开户
  • 有什么网站可以免费seo顾问服务四川
  • 怎么用ps做网站首页营销网络的建设有哪些
  • 网站建设如何设计数据库百度站长工具怎么查排名
  • 没有数据库的网站怎么接推广
  • 湖北网站优化公司合作seo公司
  • ppt网站超链接怎么做网上推广渠道有哪些
  • 网站运维推广怎么做网站快速收录付费入口
  • 淘宝客app定制广东seo教程
  • 郑州网站建设喝彩东莞seo计费管理
  • 专业团队电影seo数据
  • 公司找私人做网站seo人员培训