Spec-Zone.ru › OpenJDK 27

Класс MessageDigest

java.lang.Object
java.security.MessageDigestSpi
java.security.MessageDigest
public abstract class MessageDigest extends MessageDigestSpi
Этот MessageDigest класс предоставляет приложениям функциональность алгоритма хеширования сообщений, такого как SHA-1 или SHA-256. Дайджесты сообщений — это безопасные односторонние хеш-функции, которые принимают данные произвольного размера и выдают хеш-значение фиксированной длины.

Объект MessageDigest изначально находится в инициализированном состоянии. Данные обрабатываются с его помощью посредством методов update. В любой момент можно вызвать reset, чтобы сбросить дайджест. После обновления всех данных следует вызвать один из методов digest, чтобы завершить вычисление хеша.

Метод digest можно вызвать один раз для заданного числа обновлений. После вызова digest объект MessageDigest возвращается в исходное инициализированное состояние.

Реализации могут реализовывать интерфейс Cloneable. Клиентские приложения могут проверить возможность клонирования, попытавшись создать клон и перехватив CloneNotSupportedException:

MessageDigest md = MessageDigest.getInstance("SHA-256");

try {
    md.update(toChapter1);
    MessageDigest tc1 = md.clone();
    byte[] toChapter1Digest = tc1.digest();
    md.update(toChapter2);
    ...etc.
} catch (CloneNotSupportedException cnse) {
    throw new DigestException("couldn't make digest of partial content");
}

Обратите внимание: если данная реализация не поддерживает клонирование, промежуточные дайджесты всё равно можно вычислить, создав несколько экземпляров, если число дайджестов известно заранее.

Обратите внимание: этот класс является абстрактным и по историческим причинам наследуется от MessageDigestSpi. Разработчикам приложений следует обращать внимание только на методы, определённые в этом MessageDigest классе; все методы суперкласса предназначены для поставщиков криптографических служб, желающих предоставить собственные реализации алгоритмов хеширования сообщений.

Каждая реализация платформы Java обязана поддерживать следующие стандартные алгоритмы MessageDigest:

  • SHA-1
  • SHA-256
  • SHA-384
Эти алгоритмы описаны в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java. Сведения о поддержке других алгоритмов см. в документации к выпуску вашей реализации.
Начиная с:
1.1
Внешние спецификации
  • Стандартные имена алгоритмов безопасности Java
См. также:
  • DigestInputStream
  • DigestOutputStream

Краткое описание конструкторов

MessageDigest(String algorithm)
Модификатор Конструктор Описание
protected
Создаёт дайджест сообщения с указанным именем алгоритма.

Краткое описание методов

Модификатор и тип Метод Описание
Object clone()
Возвращает клон, если реализация поддерживает клонирование.
byte[] digest()
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение.
byte[] digest(byte[] input)
Выполняет заключительное обновление дайджеста с помощью указанного массива байтов, а затем завершает вычисление дайджеста.
int digest(byte[] buf, int offset, int len)
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение.
final String getAlgorithm()
Возвращает строку, идентифицирующую алгоритм независимо от особенностей реализации.
final int getDigestLength()
Возвращает длину дайджеста в байтах или 0, если поставщик не поддерживает эту операцию, а реализация не поддерживает клонирование.
static MessageDigest getInstance(String algorithm)
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования.
static MessageDigest getInstance(String algorithm, String provider)
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования.
static MessageDigest getInstance(String algorithm, Provider provider)
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования.
final Provider getProvider()
Возвращает поставщика этого объекта дайджеста сообщения.
static boolean isEqual(byte[] digesta, byte[] digestb)
Сравнивает два дайджеста на равенство.
void reset()
Сбрасывает дайджест для дальнейшего использования.
String toString()
Возвращает строковое представление этого объекта дайджеста сообщения.
void update(byte input)
Обновляет дайджест с помощью указанного байта.
void update(byte[] input)
Обновляет дайджест с помощью указанного массива байтов.
void update(byte[] input, int offset, int len)
Обновляет дайджест с помощью указанного массива байтов, начиная с заданного смещения.
final void update(ByteBuffer input)
Обновляет дайджест с помощью указанного ByteBuffer.

Методы, объявленные в классе MessageDigestSpi

engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, engineUpdate, engineUpdate
Модификатор и тип Метод Описание
protected abstract byte[] engineDigest()
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение.
protected int engineDigest(byte[] buf, int offset, int len)
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение.
protected int engineGetDigestLength()
Возвращает длину дайджеста в байтах.
protected abstract void engineReset()
Сбрасывает дайджест для дальнейшего использования.
protected abstract void engineUpdate(byte input)
Обновляет дайджест с помощью указанного байта.
protected abstract void engineUpdate(byte[] input, int offset, int len)
Обновляет дайджест с помощью указанного массива байтов, начиная с заданного смещения.
protected void engineUpdate(ByteBuffer input)
Обновляет дайджест с помощью указанного ByteBuffer.

Методы, объявленные в классе Object

equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
boolean equals(Object obj)
Указывает, равен ли другой объект этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация устарела и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

Подробное описание конструкторов

MessageDigest

protected MessageDigest(String algorithm)
Создаёт дайджест сообщения с указанным именем алгоритма.
Параметры:
algorithm — стандартное имя алгоритма хеширования. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java.
Внешние спецификации
  • Стандартные имена алгоритмов безопасности Java

Подробное описание методов

getInstance

public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования.

Этот метод перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi первого поставщика, поддерживающего указанный алгоритм.

Обратите внимание: список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().

Примечание по реализации:
Эталонная реализация JDK дополнительно использует следующие свойства безопасности:
  • свойство jdk.security.provider.preferred Security для определения предпочтительного порядка поставщиков для указанного алгоритма. Этот порядок может отличаться от порядка поставщиков, возвращаемых методом Security.getProviders().
  • свойство jdk.crypto.disabledAlgorithms Security для определения допустимости указанного алгоритма. Если задано значение jdk.crypto.disabledAlgorithms, оно имеет приоритет над значением свойства безопасности.
Параметры:
algorithm — имя запрошенного алгоритма. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java.
Возвращает:
объект MessageDigest, реализующий указанный алгоритм
Выбрасывает:
NoSuchAlgorithmException — если ни один Provider не поддерживает реализацию MessageDigestSpi для указанного алгоритма
NullPointerException — если algorithm имеет значение null
Внешние спецификации
  • Стандартные имена алгоритмов безопасности Java
См. также:
  • Provider

getInstance

public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования.

Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.

Обратите внимание: список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().

Примечание по реализации:
Эталонная реализация JDK дополнительно использует свойство jdk.crypto.disabledAlgorithms Security, чтобы определить, допустим ли указанный алгоритм. Если задано значение jdk.crypto.disabledAlgorithms, оно имеет приоритет над значением свойства безопасности.
Параметры:
algorithm — имя запрошенного алгоритма. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java.
provider — имя поставщика.
Возвращает:
объект MessageDigest, реализующий указанный алгоритм
Выбрасывает:
IllegalArgumentException — если имя поставщика равно null или пусто
NoSuchAlgorithmException — если у указанного поставщика недоступна реализация MessageDigestSpi для указанного алгоритма
NoSuchProviderException — если указанный поставщик не зарегистрирован в списке поставщиков безопасности
NullPointerException — если algorithm имеет значение null
Внешние спецификации
  • Стандартные имена алгоритмов безопасности Java
См. также:
  • Provider

getInstance

public static MessageDigest getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования.

Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi указанного поставщика. Обратите внимание: указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.

Примечание по реализации:
Эталонная реализация JDK дополнительно использует свойство jdk.crypto.disabledAlgorithms Security, чтобы определить, допустим ли указанный алгоритм. Если задано значение jdk.crypto.disabledAlgorithms, оно имеет приоритет над значением свойства безопасности.
Параметры:
algorithm — имя запрошенного алгоритма. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java.
provider — поставщик.
Возвращает:
объект MessageDigest, реализующий указанный алгоритм
Выбрасывает:
IllegalArgumentException — если указанный поставщик равен null
NoSuchAlgorithmException — если у указанного объекта Provider недоступна реализация MessageDigestSpi для указанного алгоритма
NullPointerException — если algorithm имеет значение null
Начиная с:
1.4
Внешние спецификации
  • Стандартные имена алгоритмов безопасности Java
См. также:
  • Provider

getProvider

public final Provider getProvider()
Возвращает поставщика этого объекта дайджеста сообщения.
Возвращает:
поставщика этого объекта дайджеста сообщения

update

public void update(byte input)
Обновляет дайджест с помощью указанного байта.
Параметры:
input — байт, используемый для обновления дайджеста.

update

public void update(byte[] input, int offset, int len)
Обновляет дайджест с помощью указанного массива байтов, начиная с заданного смещения.
Параметры:
input — массив байтов.
offset — начальное смещение в массиве байтов.
len — число используемых байтов, начиная с offset.

update

public void update(byte[] input)
Обновляет дайджест с помощью указанного массива байтов.
Параметры:
input — массив байтов.

update

public final void update(ByteBuffer input)
Обновляет дайджест с помощью указанного ByteBuffer. Дайджест обновляется с использованием байтов input.remaining(), начиная с input.position(). После возврата позиция буфера будет равна его пределу; его предел не изменится.
Параметры:
input — ByteBuffer
Начиная с:
1.5

digest

public byte[] digest()
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение. После этого вызова дайджест сбрасывается.
Возвращает:
массив байтов, содержащий результирующее хеш-значение.

digest

public int digest(byte[] buf, int offset, int len) throws DigestException
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение. После этого вызова дайджест сбрасывается.
Параметры:
buf — выходной буфер для вычисленного дайджеста
offset — смещение в выходном буфере, с которого начинается запись дайджеста
len — число байтов в buf, выделенных для дайджеста
Возвращает:
число байтов, записанных в buf
Выбрасывает:
DigestException — если произошла ошибка.

digest

public byte[] digest(byte[] input)
Выполняет заключительное обновление дайджеста с помощью указанного массива байтов, а затем завершает вычисление дайджеста. Иными словами, этот метод сначала вызывает update(input), передавая массив input методу update, а затем вызывает digest().
Параметры:
input — входные данные, которые следует обработать перед завершением дайджеста.
Возвращает:
массив байтов, содержащий результирующее хеш-значение.

toString

public String toString()
Возвращает строковое представление этого объекта дайджеста сообщения.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление объекта

isEqual

public static boolean isEqual(byte[] digesta, byte[] digestb)
Сравнивает два дайджеста на равенство. Два дайджеста равны, если они имеют одинаковую длину и все байты в соответствующих позициях совпадают.
Примечание по реализации:
Для проверки равенства анализируются все байты в digesta, если только digestb не равно null или его длина не равна нулю. Если digestb не равно null и его длина не равна нулю, время вычисления зависит только от длины digesta. Оно не зависит от длины digestb или содержимого digesta и digestb.
Параметры:
digesta — один из сравниваемых дайджестов.
digestb — другой сравниваемый дайджест.
Возвращает:
true, если дайджесты равны; в противном случае — false.

reset

public void reset()
Сбрасывает дайджест для дальнейшего использования.

getAlgorithm

public final String getAlgorithm()
Возвращает строку, идентифицирующую алгоритм независимо от особенностей реализации. Имя должно быть стандартным именем Java Security (например, «SHA-256»). Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java.
Возвращает:
имя алгоритма
Внешние спецификации
  • Стандартные имена алгоритмов безопасности Java

getDigestLength

public final int getDigestLength()
Возвращает длину дайджеста в байтах или 0, если поставщик не поддерживает эту операцию, а реализация не поддерживает клонирование.
Возвращает:
длину дайджеста в байтах или 0, если поставщик не поддерживает эту операцию, а реализация не поддерживает клонирование.
Начиная с:
1.2

clone

public Object clone() throws CloneNotSupportedException
Возвращает клон, если реализация поддерживает клонирование.
Переопределяет:
clone в классе MessageDigestSpi
Возвращает:
клон, если реализация поддерживает клонирование.
Выбрасывает:
CloneNotSupportedException — если этот метод вызван для реализации, не поддерживающей Cloneable.
См. также:
  • Cloneable

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API