Springboot+Mybatis+redis+postman項目實戰總目錄*
番外篇:SpringBoot 用戶注冊時經MD5加密存入數據庫
工具:
idea2019
Mysql
前端模擬:postman
加密算法:MD5
我們日常登陸時,為確保密碼的安全性,我們需要在前端將用戶設置的密碼進行加密,然后傳輸到后台數據進行存儲,這里需要主義的時,我們在頁面上進行加密后由后台程序進行解密,得到原始的密碼,接着用另一種方法對密碼再次進行加密,然后存儲到數據庫中。這里為啥要加密解密再加密呢?是因為我們的前后端加密算法不能一樣,因為如果一樣的額話,前端加密算法在頁面上是可以通過源碼查到的,所以我們的后端如果用同樣的加密算法的話,這個加密過程就相當於沒有加密,所以我們現在要來實現的就是第二個階段,后端對原始密碼進行加密的功能。首先做一下基礎工作。
一、准備工作
1. 導入加密依賴
<!--MD5加密 對注冊的密碼進行加密操作--> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.8.1</version> </dependency>
2. 加密工具類Md5Utils的設計與實現,每個步驟都有詳細的講解與介紹。
/**
* @author yeyuting
* @create 2021/1/19
*/
public class Md5Utils {
/**
*2021/1/19 14:37
* * @param str
* * @return : java.lang.String
*/
public static String code(String str){ try{ //1.獲取MessageDigest對象 生成一個MD5加密計算摘要 MessageDigest md = MessageDigest.getInstance("MD5") ; /* str.getBytes() * 使用平台的默認字符集將此 String 編碼為 byte 序列,並將結果存儲到一個新的 byte 數組中. 此方法多用在字節流中,用與將字符串轉換為字節。 * */ // 計算md5函數 使用指定的字節數組更新摘要md md.update(str.getBytes()); /* * digest()最后確定返回md5 hash值,返回值為8的字符串。 * 因為md5 hash值是16位的hex值,實際上就是8位的 * */ byte[] byteDigest = md.digest() ; int i ; StringBuffer buf = new StringBuffer("") ; //遍歷byteDigest //加密邏輯,可以debug自行了解一下加密邏輯 for(int offset = 0 ; offset<byteDigest.length ; offset++){ i = byteDigest[offset] ; if(i < 0) i += 256 ; if(i < 16) buf.append("0") ; // BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;得到字符串形式的hash值 buf.append(Integer.toHexString(i)) ; } return buf.toString() ; }catch (NoSuchAlgorithmException e){ e.printStackTrace(); return null ; } } }
二、這樣一來,准備工作就做好了,現在來進行業務層代碼實現
1. controller層:
@PostMapping("/addUser")
public Result addUser(@RequestBody User user) { String password = Md5Utils.code(user.getPassword()) ; System.out.println(password); user.setPassword(password); userService.insertOne(user) ; return Results.success("成功注冊") ; }
2. service層:
/* * 新增一個用戶 * */ public Integer insertOne(User user);
@Override
public Integer insertOne(User user){ return userMapper.insertOne(user); }
3. dao層:
public Integer insertOne(User user);
xml文件:
<insert id="insertOne">
insert into sys_user(id,username,password)
values(#{id},#{userName},#{password})
</insert>
三、這樣一來,代碼邏輯部分就設計好了,接下來啟動項目,利用post模擬前端傳輸數據
測試結果如下:
數據庫表數據如下:
從數據庫可知,數據庫中成功插入一條數據,且該數據的密碼也經過了加密,如此一來,MD5加密算法就介紹完了。
至此,結束。