본문 바로가기
개발/Java

[Java] 단방향 암호화 하기 - SHA256

by 코딩하는 흰둥이 2023. 5. 26.
반응형
SHA256 암호화 하기
import java.security.MessageDigest;

public class RunTestController {
    public static void main(String [] args) throws Exception {
        try {

            // 사용자로 부터 받은 패스워드
            String password = "12345";

            System.err.println("passWord : " + password);
            System.out.println("단방향 passWord : " + encrypt(password));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 단반향 암호화 하기
     * @param password
     * @return
     * @throws Exception
     */
    public static String encrypt(String password) throws Exception {
        // 단반향 알고리즘
        final String SHA = "SHA-256";

        try {
            MessageDigest messagedigest = null;
            messagedigest = MessageDigest.getInstance(SHA);
            messagedigest.update(password.getBytes());
            byte [] bytes = messagedigest.digest();
            StringBuffer buffer = new StringBuffer();
            for(int i = 0; i < bytes.length; i++) {
                buffer.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
            }
            return buffer.toString();
        } catch (Exception e) {
            throw e;
        }
    }
}

사용자로 부터 받은 비밀번호를 암호화 시킨다

 

회원가입 시 암호화 값을 DB에 저장하고

로그인 시 사용자로 부터 받은 비밀번호 값을 단방향 암호화를 하여

DB에 저장되어 있는 암호화 값과 비교하여 로그인을 하면 된다  

 

양방향 암호화는 복호화가 가능

단방향 암호화는 복호화가 불가능

(아에 안되는것은 아니라는데 힘들다고 한다)

 

 

 

Util 용 Class 구분
package com.example.practice.util;

import java.security.MessageDigest;

public class Encrypt {
    private static final String SHA = "SHA-256";

    public Encrypt() {
        super();
    }

    /**
     * 단방향 암호화
     * @param passWord
     * @return
     * @throws Exception
     */
    public static String encrypt(String passWord) throws Exception {
        try {
            MessageDigest messagedigest = null;
            messagedigest = MessageDigest.getInstance(SHA);
            messagedigest.update(passWord.getBytes());
            byte[] bytes = messagedigest.digest();
            StringBuffer buffer = new StringBuffer();
            for (int i = 0; i < bytes.length; i++) {
                buffer.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
            }
            return buffer.toString();
        } catch (Exception e) {
            throw e;
        }
    }
}

댓글