MessageDigestSpi

MessageDigestSpi (메시지 다이제스트 SPI)

MessageDigest 클래스의 Service Provider Interface(SPI)를 정의하는 클래스입니다. MD5나 SHA 같은 특정 메시지 다이제스트 알고리즘 구현을 제공하려는 암호화 서비스 프로바이더는 이 클래스의 모든 추상 메서드를 구현해야 합니다.

출처: Java API Reference

본문

MessageDigestSpi는 메시지 다이제스트 알고리즘의 내부 엔진(engine) 역할을 수행하며, 실제 MessageDigest 객체의 공개 메서드가 이 SPI의 engine* 메서드들을 호출합니다. 메시지 다이제스트는 임의 크기의 데이터를 받아 고정 길이 해시 값을 내는 단방향 해시 함수입니다.

SPI가 정의하는 주요 메서드는 다음과 같습니다.

  • protected int engineGetDigestLength() — 다이제스트의 바이트 길이를 반환합니다. 기본 구현은 0을 반환하며 프로바이더가 오버라이드할 수 있습니다.
  • protected abstract void engineUpdate(byte input) — 지정된 바이트로 다이제스트를 갱신합니다.
  • protected abstract void engineUpdate(byte[] input, int offset, int len) — 지정된 바이트 배열의 일부로 다이제스트를 갱신합니다.
  • protected void engineUpdate(ByteBuffer input) — 지정된 ByteBuffer로 다이제스트를 갱신합니다.
  • protected abstract byte[] engineDigest() — 패딩 같은 마지막 연산을 수행해 해시 계산을 완료합니다. 호출된 뒤에는 엔진을 재설정해야 합니다.
  • protected int engineDigest(byte[] buf, int offset, int len) — 해시 계산을 완료하고 buf에 저장합니다. len이 실제 다이제스트 길이보다 작으면 DigestException을 던집니다.
  • protected abstract void engineReset() — 다이제스트를 재사용할 수 있도록 재설정합니다.
  • public Object clone() — 구현이 복제 가능하면 복제본을 반환하며, 그렇지 않으면 CloneNotSupportedException을 던집니다.

구현은 Cloneable을 자유롭게 구현할 수 있습니다.

더 알아보기 (Learn more)

Java 공식 API