카테고리 없음

AES256으로 암호화하고 복호화 하기

teamnova 2023. 6. 23. 12:00
728x90

안녕하세요. 오늘은 AES256으로 비밀번호를 암호화를 해보고 복호화도 해보겠습니다.

 

먼저 AES256클래스를 생성하겠습니다. 각 메서드는 암호화 메서드와 복호화 메서드가 있습니다.

 

public class AES256 {
    private final static String ALGORITHM = "AES";
    private final static int KEY_SIZE = 256;
    private SecretKeySpec secretKeySpec;

    public AES256(String key) {
        generateKey(key);
    }

    private void generateKey(String key) {
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
            keyGenerator.init(KEY_SIZE);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] encodedKey = secretKey.getEncoded();
            secretKeySpec = new SecretKeySpec(encodedKey, ALGORITHM);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    public String encrypt(String plaintext) {
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
            byte[] encrypted = cipher.doFinal(plaintext.getBytes());
            return Base64.encodeToString(encrypted, Base64.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public String decrypt(String ciphertext) {
        try {
            byte[] ciphertextBytes = Base64.decode(ciphertext, Base64.DEFAULT);
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
            byte[] decrypted = cipher.doFinal(ciphertextBytes);
            return new String(decrypted);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

클래스를 만드셨다면 이제 메인 클래스에서 암호화를 해보고 복호화도 해서 출력을 하겠습니다.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AES256 aes256 = new AES256("my_secret_key");
        String password = aes256.encrypt("teamnova");
        Log.d("TAG", "암호화: " + password);
        Log.d("TAG", "복호화 : " + aes256.decrypt(password));
    }

}

teamnova를 암호화 하고 암호화된 문자열을 복호화해서 다시 teamnova로 보이게 합니다.

다음은 결과입니다.

해당 기능을 비밀번호 저장할때 사용하셔도 되고 암호화가 필요한 내용이라면 암호화를 할 수 있습니다.