Md5Util.getMD5String(oldPwd)

Md5Util.getMD5String(oldPwd) 这行代码表示调用了一个名为 Md5Util 的工具类中的 getMD5String 方法,并将一个名为 oldPwd 的变量(通常代表旧密码)作为参数传递给这个方法。这个方法的目的是将传入的字符串(在这个场景中是密码)进行MD5加密处理,并返回加密后的字符串。

MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值(通常用32位的十六进制字符串表示)。MD5算法因其快速和简单而广泛使用,但已知存在弱点,不适合用于安全性要求高的场合,比如密码存储。尽管它仍然可以用于数据完整性校验等目的。

在这段代码中:

  • Md5Util:是一个工具类,通常包含了一些静态方法,用于执行MD5加密等操作。
  • getMD5String:是这个工具类中的一个方法,它接受一个字符串作为输入,返回该字符串的MD5加密后的字符串表示。
  • oldPwd:是一个变量,代表要加密的字符串,这里假设它是旧密码。

在实际应用中,将密码明文直接进行MD5加密后存储是不安全的,因为MD5已经被证明容易受到暴力破解和彩虹表攻击。为了提高安全性,通常会使用更安全的哈希算法(如SHA-256)并结合盐值(salt)进行加密。盐值是一个随机值,与密码一起进行哈希处理,可以防止彩虹表攻击,因为即使两个用户使用了相同的密码,由于盐值的不同,他们的哈希值也会不同。

package com.itheima.controller; import com.itheima.pojo.Result; import com.itheima.pojo.User; import com.itheima.service.UserService; import com.itheima.utils.JwtUtil; import com.itheima.utils.Md5Util; import com.itheima.utils.ThreadLocalUtil; import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.URL; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @RestController @RequestMapping("/user") @Validated public class UserController { @Autowired private UserService userService; @Autowired private StringRedisTemplate stringRedisTemplate; @PostMapping("/register") public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password) { //查询用户 User u = userService.findByUserName(username); if (u == null) { //没有占用 //注册 userService.register(username, password); return Result.success(); } else { //占用 return Result.error("用户名已被占用"); } } @PostMapping("/login") public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password) { //根据用户名查询用户 User loginUser = userService.findByUserName(username); //判断该用户是否存在 if (loginUser == null) { return Result.error("用户名错误"); } //判断密码是否正确 loginUser对象中的password是密文 if (Md5Util.getMD5String(password).equals(loginUser.getPassword())) { //登录成功 Map<String, Object> claims = new HashMap<>(); claims.put("id", loginUser.getId()); claims.put("username", loginUser.getUsername()); String token = JwtUtil.genToken(claims); //把token存储到redis中 ValueOperations<String, String> operations = stringRedisTemplate.opsForValue(); operations.set(token,token,1, TimeUnit.HOURS); return Result.success(token); } return Result.error("密码错误"); } @GetMapping("/userInfo") public Result<User> userInfo(/*@RequestHeader(name = "Authorization") String token*/) { //根据用户名查询用户 /* Map<String, Object> map = JwtUtil.parseToken(token); Strin g username = (String) map.get("username");*/ Map<String, Object> map = ThreadLocalUtil.get(); String username = (String) map.get("username"); User user = userService.findByUserName(username); return Result.success(user); } @PutMapping("/update") public Result update(@RequestBody @Validated User user) { userService.update(user); return Result.success(); } @PatchMapping("updateAvatar") public Result updateAvatar(@RequestParam @URL String avatarUrl) { userService.updateAvatar(avatarUrl); return Result.success(); } @PatchMapping("/updatePwd") public Result updatePwd(@RequestBody Map<String, String> params,@RequestHeader("Authorization") String token) { //1.校验参数 String oldPwd = params.get("old_pwd"); String newPwd = params.get("new_pwd"); String rePwd = params.get("re_pwd"); if (!StringUtils.hasLength(oldPwd) || !StringUtils.hasLength(newPwd) || !StringUtils.hasLength(rePwd)) { return Result.error("缺少必要的参数"); } //原密码是否正确 //调用userService根据用户名拿到原密码,再和old_pwd比对 Map<String,Object> map = ThreadLocalUtil.get(); String username = (String) map.get("username"); User loginUser = userService.findByUserName(username); if (!loginUser.getPassword().equals(Md5Util.getMD5String(oldPwd))){ return Result.error("原密码填写不正确"); } //newPwd和rePwd是否一样 if (!rePwd.equals(newPwd)){ return Result.error("两次填写的新密码不一样"); } //2.调用service完成密码更新 userService.updatePwd(newPwd); //删除redis中对应的token ValueOperations<String, String> operations = stringRedisTemplate.opsForValue(); operations.getOperations().delete(token); return Result.success(); } } 这里面有能登进去的账号和密码吗
08-27
@RestController @RequestMapping({"/user"}) @Validated public class UserController { @Autowired private UserService userService; @Autowired private StringRedisTemplate stringRedisTemplate; public UserController() { } @PostMapping({"/register"}) public Result register(@Pattern( regexp = "^\\S{5,16}$" ) String username, @Pattern( regexp = "^\\S{5,16}$" ) String password) { User u = this.userService.findByUserName(username); if (u == null) { this.userService.register(username, password); return Result.success(); } else { return Result.error("用户名已被占用"); } } @PostMapping({"/login"}) public Result<String> login(@Pattern( regexp = "^\\S{5,16}$" ) String username, @Pattern( regexp = "^\\S{5,16}$" ) String password) { User loginUser = this.userService.findByUserName(username); if (loginUser == null) { return Result.error("用户名错误"); } else if (Md5Util.getMD5String(password).equals(loginUser.getPassword())) { Map<String, Object> claims = new HashMap(); claims.put("id", loginUser.getId()); claims.put("username", loginUser.getUsername()); String token = JwtUtil.genToken(claims); ValueOperations<String, String> operations = this.stringRedisTemplate.opsForValue(); operations.set(token, token, 1L, TimeUnit.HOURS); return Result.success(token); } else { return Result.error("密码错误"); } } @GetMapping({"/userInfo"}) public Result<User> userInfo() { Map<String, Object> map = (Map)ThreadLocalUtil.get(); String username = (String)map.get("username"); User user = this.userService.findByUserName(username); return Result.success(user); } @PutMapping({"/update"}) public Result update(@RequestBody @Validated User user) { this.userService.update(user); return Result.success(); } @PatchMapping({"updateAvatar"}) public Result updateAvatar(@RequestParam @URL String avatarUrl) { this.userService.updateAvatar(avatarUrl); return Result.success(); } @PatchMapping({"/updatePwd"}) public Result updatePwd(@RequestBody Map<String, String> params, @RequestHeader("Authorization") String token) { String oldPwd = (String)params.get("old_pwd"); String newPwd = (String)params.get("new_pwd"); String rePwd = (String)params.get("re_pwd"); if (StringUtils.hasLength(oldPwd) && StringUtils.hasLength(newPwd) && StringUtils.hasLength(rePwd)) { Map<String, Object> map = (Map)ThreadLocalUtil.get(); String username = (String)map.get("username"); User loginUser = this.userService.findByUserName(username); if (!loginUser.getPassword().equals(Md5Util.getMD5String(oldPwd))) { return Result.error("原密码填写不正确"); } else if (!rePwd.equals(newPwd)) { return Result.error("两次填写的新密码不一样"); } else { this.userService.updatePwd(newPwd); ValueOperations<String, String> operations = this.stringRedisTemplate.opsForValue(); operations.getOperations().delete(token); return Result.success(); } } else { return Result.error("缺少必要的参数"); } } } 这里面有进入网页的账户和密码吗
08-27
### Java `Md5Util.getMd5` 方法使用示例 在Java中实现MD5哈希功能通常会涉及到创建一个工具类来简化这一过程。下面是一个可能的 `Md5Util` 类及其静态方法 `getMd5` 的定义和用法: #### 定义 `Md5Util` 工具类 ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Md5Util { private static final String ALGORITHM = "MD5"; public static String getMd5(String input) { try { MessageDigest md = MessageDigest.getInstance(ALGORITHM); byte[] messageDigest = md.digest(input.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : messageDigest) { String hex = Integer.toHexString(0xFF & b); if (hex.length() == 1) { hexString.append('0'); } hexString.append(hex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } } ``` 此代码片段展示了如何通过给定字符串计算其对应的MD5散列值[^1]。 #### 使用 `getMd5` 方法的例子 假设有一个场景是在注册新用户时为了安全起见对密码进行加密处理,可以这样调用上述的方法: ```java // 用户输入的原始密码 String password = "userPassword"; // 对密码应用 MD5 加密算法得到固定长度的摘要信息 String encryptedPassword = Md5Util.getMd5(password); System.out.println("Original Password: " + password); System.out.println("Encrypted by MD5: " + encryptedPassword); ``` 这段程序将会打印出未加密前后的版本以便于验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值