Класс 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-1SHA-256SHA-384
- Начиная с:
- 1.1
- Внешние спецификации
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создаёт дайджест сообщения с указанным именем алгоритма. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
clone() |
Возвращает клон, если реализация поддерживает клонирование. |
byte[] |
digest() |
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение. |
byte[] |
digest |
Выполняет заключительное обновление дайджеста с помощью указанного массива байтов, а затем завершает вычисление дайджеста. |
int |
digest |
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение. |
final String |
getAlgorithm() |
Возвращает строку, идентифицирующую алгоритм независимо от особенностей реализации. |
final int |
getDigestLength() |
Возвращает длину дайджеста в байтах или 0, если поставщик не поддерживает эту операцию, а реализация не поддерживает клонирование. |
static MessageDigest |
getInstance |
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования. |
static MessageDigest |
getInstance |
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования. |
static MessageDigest |
getInstance |
Возвращает объект MessageDigest, реализующий указанный алгоритм хеширования. |
final Provider |
getProvider() |
Возвращает поставщика этого объекта дайджеста сообщения. |
static boolean |
isEqual |
Сравнивает два дайджеста на равенство. |
void |
reset() |
Сбрасывает дайджест для дальнейшего использования. |
String |
toString() |
Возвращает строковое представление этого объекта дайджеста сообщения. |
void |
update |
Обновляет дайджест с помощью указанного байта. |
void |
update |
Обновляет дайджест с помощью указанного массива байтов. |
void |
update |
Обновляет дайджест с помощью указанного массива байтов, начиная с заданного смещения. |
final void |
update |
Обновляет дайджест с помощью указанного ByteBuffer. |
Методы, объявленные в классе MessageDigestSpi
engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, engineUpdate, engineUpdate | Модификатор и тип | Метод | Описание |
|---|---|---|
protected abstract byte[] |
engineDigest() |
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение. |
protected int |
engineDigest |
Завершает вычисление хеша, выполняя заключительные операции, такие как дополнение. |
protected int |
engineGetDigestLength() |
Возвращает длину дайджеста в байтах. |
protected abstract void |
engineReset() |
Сбрасывает дайджест для дальнейшего использования. |
protected abstract void |
engineUpdate |
Обновляет дайджест с помощью указанного байта. |
protected abstract void |
engineUpdate |
Обновляет дайджест с помощью указанного массива байтов, начиная с заданного смещения. |
protected void |
engineUpdate |
Обновляет дайджест с помощью указанного ByteBuffer. |
Методы, объявленные в классе Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Указывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
MessageDigest
protected MessageDigest(String algorithm)
- Параметры:
-
algorithm— стандартное имя алгоритма хеширования. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java. - Внешние спецификации
Подробное описание методов
getInstance
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
MessageDigest, реализующий указанный алгоритм хеширования. Этот метод перебирает список зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi первого поставщика, поддерживающего указанный алгоритм.
Обратите внимание: список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание по реализации:
- Эталонная реализация JDK дополнительно использует следующие свойства безопасности:
- свойство
jdk.security.provider.preferredSecurityдля определения предпочтительного порядка поставщиков для указанного алгоритма. Этот порядок может отличаться от порядка поставщиков, возвращаемых методомSecurity.getProviders(). - свойство
jdk.crypto.disabledAlgorithmsSecurityдля определения допустимости указанного алгоритма. Если задано значениеjdk.crypto.disabledAlgorithms, оно имеет приоритет над значением свойства безопасности.
- свойство
- Параметры:
-
algorithm— имя запрошенного алгоритма. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java. - Возвращает:
- объект
MessageDigest, реализующий указанный алгоритм - Выбрасывает:
-
NoSuchAlgorithmException— если ни одинProviderне поддерживает реализациюMessageDigestSpiдля указанного алгоритма -
NullPointerException— еслиalgorithmимеет значениеnull - Внешние спецификации
- См. также:
getInstance
public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
MessageDigest, реализующий указанный алгоритм хеширования. Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание: список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание по реализации:
- Эталонная реализация JDK дополнительно использует свойство
jdk.crypto.disabledAlgorithmsSecurity, чтобы определить, допустим ли указанный алгоритм. Если задано значениеjdk.crypto.disabledAlgorithms, оно имеет приоритет над значением свойства безопасности. - Параметры:
-
algorithm— имя запрошенного алгоритма. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java. -
provider— имя поставщика. - Возвращает:
- объект
MessageDigest, реализующий указанный алгоритм - Выбрасывает:
-
IllegalArgumentException— если имя поставщика равноnullили пусто -
NoSuchAlgorithmException— если у указанного поставщика недоступна реализацияMessageDigestSpiдля указанного алгоритма -
NoSuchProviderException— если указанный поставщик не зарегистрирован в списке поставщиков безопасности -
NullPointerException— еслиalgorithmимеет значениеnull - Внешние спецификации
- См. также:
getInstance
public static MessageDigest getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
MessageDigest, реализующий указанный алгоритм хеширования. Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi указанного поставщика. Обратите внимание: указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.
- Примечание по реализации:
- Эталонная реализация JDK дополнительно использует свойство
jdk.crypto.disabledAlgorithmsSecurity, чтобы определить, допустим ли указанный алгоритм. Если задано значениеjdk.crypto.disabledAlgorithms, оно имеет приоритет над значением свойства безопасности. - Параметры:
-
algorithm— имя запрошенного алгоритма. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest спецификации стандартных имён алгоритмов безопасности Java. -
provider— поставщик. - Возвращает:
- объект
MessageDigest, реализующий указанный алгоритм - Выбрасывает:
-
IllegalArgumentException— если указанный поставщик равенnull -
NoSuchAlgorithmException— если у указанного объектаProviderнедоступна реализацияMessageDigestSpiдля указанного алгоритма -
NullPointerException— еслиalgorithmимеет значениеnull - Начиная с:
- 1.4
- Внешние спецификации
- См. также:
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)
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
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()
- Возвращает:
- имя алгоритма
- Внешние спецификации
getDigestLength
public final int getDigestLength()
- Возвращает:
- длину дайджеста в байтах или 0, если поставщик не поддерживает эту операцию, а реализация не поддерживает клонирование.
- Начиная с:
- 1.2
clone
public Object clone() throws CloneNotSupportedException
- Переопределяет:
-
cloneв классеMessageDigestSpi - Возвращает:
- клон, если реализация поддерживает клонирование.
- Выбрасывает:
-
CloneNotSupportedException— если этот метод вызван для реализации, не поддерживающейCloneable. - См. также:
© 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.