-
java : (링크) AES-256 암호화Language/Java 2023. 12. 18. 00:01
https://mogoh-developer.tistory.com/27
Cipher : java에서 암호화/복호화 구현 객체 https://scshim.tistory.com/305
초기화할 때 init() 메서드를 호출하는데, 인자로 opmode, key(certificate), params, 그리고 random을 요구한다. 여기서 중요한 것은 AlgorithmParameters 타입의 params 인자이다. 이 인스턴스는 피드백 모드의 IV 값, PBS 알고리즘의 salt와 iteration count 값 등을 저장하는 용도로 사용된다. 이 값들은 ENCRYPTION_MODE의 Cipher를 초기화하는 경우, 필수 요구사항이 아니다. ScureRandom에서 랜덤하게 생성하여 암호화 과정에 사용할 수 있기 때문이다. 이렇게 생성된 값은 암호화 Cipher 객체에 AlgorithmParameters 필드에 저장된다. 그와 다르게 DECRYPTION_MODE Cipher의 초기화에서는 params 값이 필수 사항이다. 복호화 과정에서는 암호화 과정에서 사용한 것과 동일한 params 값이 필요하기 때문이다. Cipher 클래스의 경우, init() 메서드가 호출되면, 기존에 관리하던 모든 값이 삭제된다. 그래서 Cipher 인스턴스를 다시 초기화하기 전에 getParameters() 메서드를 호출하고 암호화 과정에서 사용한 AlgorithmParameter 객체를 보관해야 한다.
AlgorithmParameters 객체를 따로 관리하는 것이 번거롭다고 느낀다면, SealedObject 클래스를 사용할 수 있다. SealedObject 클래스는 생성자에서 암호화할 평문과 Cipher 객체를 인자로 받는다(SealedObject 클래스의 sealing 과정). 이렇게 생성된 SealedObject 객체는 그 자체로 암호화된 데이터이면서 동시에 암호화에서 사용한 알고리즘 인자들을 유지, 관리한다. 이 SealedObject 객체에 암호화 과정에서 사용한 키 정보를 외부에서 전달하면 복호화된 평문 데이터를 얻을 수 있다(SealedObject 클래스의 unsealing 과정).
'Language > Java' 카테고리의 다른 글
java : (링크) stream 디버깅 (0) 2023.12.18 java : jackson - TypeReference (링크) (0) 2023.12.17 java : jackson - jsonNode 다루기 (링크) (0) 2023.12.17 String 형태의 json 문자열을 json 포맷으로 출력해주는 사이트 (0) 2023.12.17 java : jackson (링크) (0) 2023.12.17