🌱 오늘의 주제 : salt 암호화 하는 방법
🌱 salt 암호화 하는 방법
- Encrypt
package com.language.common;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
// salt 암호화
public class Encrypt {
public static String getSalt() {
// Random, byte 객체 생성
SecureRandom r = new SecureRandom();
byte[] salt = new byte[20];
// 난수 생성
r.nextBytes(salt);
// byte To String (10진수의 문자열로 변경)
StringBuffer sb = new StringBuffer();
for(byte b : salt) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static String getEncrypt(String pwd, String salt) {
String result = "";
try {
//SHA256 알고리즘 객체 생성
MessageDigest md = MessageDigest.getInstance("SHA-256");
// pwd와 salt 합치기
md.update((pwd + salt).getBytes());
byte[] pwdsalt = md.digest();
// byte To String
StringBuffer sb = new StringBuffer();
for(byte b : pwdsalt) {
sb.append(String.format("%02x", b));
}
result = sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return result;
}
}
- 회원가입
/**
* 회원가입
* @param nativeCategoryId
* @param foreignCategoryId
* @param loginId
* @param password
* @param email
* @param selfIntroduction
* @param languageGoals
* @param file
* @return
*/
@PostMapping("/sign_up")
public Map<String, Object> signUp(
@RequestParam("selectNativeValue") String nativeCategoryId,
@RequestParam("selectLanguageValue") String foreignCategoryId,
@RequestParam("loginId") String loginId,
@RequestParam("signup_password") String password,
@RequestParam("email") String email,
@RequestParam("selfIntroduction") String selfIntroduction,
@RequestParam("languageGoals") String languageGoals,
@RequestParam("file") MultipartFile file){
// salt 생성
String salt = Encrypt.getSalt();
// 최종 password 생성
String saltPassword = Encrypt.getEncrypt(password, salt);
// db insert
userBO.addUser(nativeCategoryId, foreignCategoryId, loginId, saltPassword, salt, email, selfIntroduction, languageGoals, file);
Map<String, Object> result = new HashMap<>();
result.put("code", 1);
result.put("result", "성공");
return result;
}
- 로그인
/**
* 로그인
* @param loginId
* @param signInPassword
* @param request
* @return
*/
// 로그인
@PostMapping("/sign_in")
public Map<String, Object> signIn(
@RequestParam("signInId") String loginId,
@RequestParam("signInPassword") String signInPassword,
HttpServletRequest request) {
// 비밀번호 인증
// SHA-256(입력받은 비밀번호 + 유저 디비 테이블의 Salt값)과 / 유저테이블에 이미 생성된 해시 값이 같으면 인증 성공
// 로그인 할때 ID로 salt값을 조회하여 입력한 비밀번호와 Salt값을 다시 암호화하여 비밀번호 체킹.
// db에서 salt 정보 가져오기
User prelogin = userBO.getUserByLoginId(loginId);
// salt db
String salt = prelogin.getSalt();
// 최종 password make - 패스워드 + db 솔트 값 합치기
String saltPassword = Encrypt.getEncrypt(signInPassword, salt);
// select null or 1행 // ** select - saltPassword로 해야함.
User user = userBO.getUserByLoginIdPassword(loginId, saltPassword);
// 로그인 처리
Map<String, Object> result = new HashMap<>();
if (user != null) {
result.put("code", 1);
result.put("result", "log-in succeed");
// 세션에 유저 정보
HttpSession session = request.getSession();
session.setAttribute("userId", user.getId());
session.setAttribute("loginId", user.getLoginId());
session.setAttribute("ImagePath", user.getImagePath());
} else {
result.put("code", 500);
result.put("errorMessage", "This user does not exist.");
}
return result;
}
'Java' 카테고리의 다른 글
Java - package와 import (0) | 2023.05.18 |
---|---|
Java - 상속 (0) | 2023.05.16 |
Java - salt 암호화 (0) | 2023.05.10 |
Java - 메서드 (0) | 2023.05.09 |
Java - 배열 (array) (0) | 2023.05.03 |