[java] Apache Shiro의 암호화 기능

Apache Shiro는 자바 기반의 보안 및 인증 프레임워크로서, 사용자 인증과 권한 관리를 비롯한 다양한 보안 기능을 제공합니다. 이 중에서도 암호화 기능은 사용자의 비밀번호와 같은 중요한 정보를 안전하게 보호하기 위해 필수적입니다. Apache Shiro를 사용하여 암호화 기능을 구현하는 방법에 대해 알아보겠습니다.

암호화 구성하기

Apache Shiro에서는 org.apache.shiro.crypto 패키지를 사용하여 암호화를 처리합니다. 이 패키지에서는 대칭키 암호화, 비대칭키 암호화, 해시 알고리즘 등 다양한 암호화 기법을 지원합니다.

먼저, Apache Shiro를 사용하기 위해 Maven의 종속성을 추가해야 합니다. 아래는 pom.xml 파일에 추가해야 할 내용입니다.

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.7.1</version>
</dependency>

암호화하기

Apache Shiro에서 암호화를 수행하려면 EncryptService 인터페이스를 사용해야 합니다. 아래는 예시 코드입니다.

import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.Hash;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

public class PasswordService {

    public String encryptPassword(String password) {
        // 랜덤한 salt 생성
        SecureRandomNumberGenerator saltGenerator = new SecureRandomNumberGenerator();
        ByteSource salt = saltGenerator.nextBytes();

        // 해시 알고리즘과 반복 횟수 설정
        String algorithmName = "SHA-256";
        int iterations = 1000;

        // 비밀번호와 salt를 사용하여 해시값 생성
        Hash hash = new SimpleHash(algorithmName, password, salt, iterations);

        // 해시값을 문자열로 변환하여 반환
        return hash.toHex();
    }
}

위의 코드에서는 먼저 SecureRandomNumberGenerator를 사용하여 랜덤한 salt를 생성합니다. 그 후에 SimpleHash 클래스를 사용하여 비밀번호와 salt를 사용하여 해시값을 생성합니다. algorithmName 변수를 통해 사용할 해시 알고리즘을 선택하고, iterations 변수를 통해 해시를 반복할 횟수를 설정할 수 있습니다. 생성된 해시값은 toHex() 메소드를 통해 문자열로 변환되어 반환됩니다.

예시 사용하기

위에서 작성한 PasswordService 클래스를 사용하여 암호화를 수행하는 예시를 보겠습니다.

public class ExampleUsage {

    public static void main(String[] args) {
        PasswordService passwordService = new PasswordService();
        
        String plainPassword = "myPassword123";

        String encryptedPassword = passwordService.encryptPassword(plainPassword);

        System.out.println("Plain Password: " + plainPassword);
        System.out.println("Encrypted Password: " + encryptedPassword);
    }
}

위의 예시 코드를 실행하면 plainPassword 변수에 저장된 비밀번호가 암호화되어 encryptedPassword 변수에 저장되고, 결과를 콘솔에 출력합니다.

Apache Shiro를 사용하여 암호화 기능을 구현하는 방법에 대해 알아보았습니다. 암호화는 중요한 정보를 안전하게 보호하는 데에 매우 중요한 역할을 합니다. Apache Shiro를 사용하면 간단하고 효과적으로 암호화 기능을 구현할 수 있습니다.

참고 자료

  1. Apache Shiro 공식 문서
  2. Apache Shiro GitHub 리포지토리