Spec-Zone.ru › OpenJDK 25

Класс 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

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

equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

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

MessageDigest

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

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

getInstance

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

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

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

Примечание по реализации:
Реализация JDK Reference Implementation дополнительно использует свойство jdk.security.provider.preferred Security, чтобы определить предпочтительный порядок поставщиков для указанного алгоритма. Этот порядок может отличаться от порядка поставщиков, возвращаемых методом Security.getProviders().
Параметры:
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().

Параметры:
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 указанного поставщика. Обратите внимание, что указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.

Параметры:
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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/MessageDigest.html

Spec-Zone.ru

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