Класс 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
Подробное описание конструкторов
MessageDigest
protected MessageDigest(String algorithm)
- Параметры:
-
algorithm— стандартное имя алгоритма дайджеста. Сведения о стандартных именах алгоритмов см. в разделе MessageDigest Спецификации стандартных имён алгоритмов безопасности Java. - Внешние спецификации
Подробное описание методов
getInstance
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
MessageDigest, реализующий указанный алгоритм дайджеста. Этот метод перебирает список зарегистрированных поставщиков безопасности, начиная с поставщика с наивысшим приоритетом. Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi первого поставщика, поддерживающего указанный алгоритм.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание по реализации:
- Реализация JDK Reference Implementation дополнительно использует свойство
jdk.security.provider.preferredSecurity, чтобы определить предпочтительный порядок поставщиков для указанного алгоритма. Этот порядок может отличаться от порядка поставщиков, возвращаемых методомSecurity.getProviders(). - Параметры:
-
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().
- Параметры:
-
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 указанного поставщика. Обратите внимание, что указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/MessageDigest.html