데이터를 관리할 때, 비밀번호와 같은 중요한 데이터암호화할 필요가 있다. ( 나쁜 시스템 관리자가 있을 수 있으니..)

 

중요한 데이터를 복호화할 수 없는 알고리즘을 사용하여 암호화하여 관리해야한다. 

 

암호화 시 사용할 알고리즘은 SHA-256이다. SHA-256는 해시 함수중에 하나로서, 해시의 결과가 256bit이라고 한다.

 

 

Java에서 제공하는 MessageDigest 를 사용하여 암호화할 것이다.

 

순서로서는

  1. String 형태로 들어오는 암호화될 대상을 byte[]로 쪼갠 뒤, 
  2. MessageDigest 객체를 이용하여 해쉬함수를 통해 암호화된 결과를 byte[]형태로 반환받는다.
  3. 결과를 16진수 문자열로 변환시켜 String 형태로 변환하여 완성한다.

 

4. 이때, 1자리 수로 반환되는 경우가 있기 때문에 변환된 문자의 결과 길이가 1일 때마다 아무 문자나 앞이나 뒤에 추가해준다.

 

 

 

 

 

 

 

 

 

 

 

public String getSecureData(String password) {
		StringBuffer sb = new StringBuffer();//문자열을 누적시킬 객체
	
		try {
			//분해하여 16진수로 변환
			MessageDigest digest = MessageDigest.getInstance("SHA-256");
			byte[] data = password.getBytes("UTF-8"); //String형을 byte[]로 쪼갰다.
			byte[] hash = digest.digest(data);
			
			//쪼개진 데이터를 대상으로 16진수값으로 변환!!
			for(int i=0;i<hash.length;i++) {
				String hex = Integer.toHexString(0xff&hash[i]);//16진수 문자열로 변환
				if(hex.length()==1) {
					sb.append("0");
				}
				sb.append(hex);
			}
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		return sb.toString();
	}

같은 문자열을 암호화할 시 같은 암호화된 문자열이 반환되므로, 비밀번호와 같은 데이터를 암호화하여 사용할 수 있다.

'프로그래밍 > Java' 카테고리의 다른 글

java - mail 보내기  (0) 2021.01.06
싱글톤 패턴 알아보기  (0) 2020.12.14
JavaFX - 개발환경 구축 및 생명주기  (0) 2020.11.23
Java - JSON & XML 파싱  (0) 2020.11.17
Java - 소켓프로그래밍 기초 Echo System  (0) 2020.11.09

회원가입과 같이 mail을 보낼 경우 사용할 수 있다.

 

구글에서 제공하는 API를 사용해보겠다.

 

 

  • java에서 제공하는 dependency를 등록한다.
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.5.0-b01</version>
		</dependency>
  • 우선 구글로 접속하여 로그인한 뒤 google계정 탭으로 이동한다.

  • 보안 탭을 열어 2단계 인증 및 앱 비밀번호를 설정한다.

  • 앱 비밀번호를 이용하여 아래의 코드를 따라서 작성하고, 원하는 제목, 내용을 기입하여 보낼 수 있다!
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailService {
	String host = "smtp.gmail.com";
	String user = "나의계정@gmail.com";
	String password = "앱비밀번호";
	Properties props = new Properties();
	
	public void send() {
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.port", 465);
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.ssl.enable", "true");
		props.put("mail.smtp.ssl.trust", "smtp.gmail.com");

		Session session = Session.getDefaultInstance(props, new Authenticator() {
			protected PasswordAuthentication getPasswordAuthentication() {
	               return new PasswordAuthentication(user, password);
	            }	
		});
		
		try {
			
			MimeMessage message = new MimeMessage(session);
			message.setFrom(new InternetAddress(user));
			message.addRecipient(Message.RecipientType.TO, new InternetAddress("받는사람이메일"));
			message.setSubject("보낼제목");
			message.setContent("<h1>this is</h1> content", "text/html;charset=utf-8");
			
			Transport.send(message);
			System.out.println("Success Message Send");
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		new MailService().send();
	}
}
[출처] Java Mail HTM형식으로 보내기|작성자 원리파고

'프로그래밍 > Java' 카테고리의 다른 글

java - 암호화  (0) 2021.01.06
싱글톤 패턴 알아보기  (0) 2020.12.14
JavaFX - 개발환경 구축 및 생명주기  (0) 2020.11.23
Java - JSON & XML 파싱  (0) 2020.11.17
Java - 소켓프로그래밍 기초 Echo System  (0) 2020.11.09

Spring에서 지원하는 ServletContextAware를 구현(implements)하면 거의 거져 먹여주는 꼴이다.

 

@Controller
public class TestController implements ServletContextAware{
	@Override
	public void setServletContext(ServletContext servletContext) {
		this.servletContext = servletContext;
	}
}

 

'프로그래밍 > Spring' 카테고리의 다른 글

Spring | collection & association  (0) 2020.12.24
Spring | AOP  (0) 2020.12.23
Spring - DI  (0) 2020.12.22

+ Recent posts