Класс 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 алгоритмы:
MD5SHA-1SHA-256
- Since:
- 1.1
- См. также:
-
DigestInputStream,DigestOutputStream
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | MessageDigest(String algorithm) | Создаёт дайджест сообщений с указанным именем алгоритма. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object | clone() | Возвращает клон, если реализация поддерживает клонирование. |
byte[] | digest() | Завершает вычисление хеша, выполняя окончательные операции, такие как заполнение. |
byte[] | digest(byte[] input) | Выполняет окончательное обновление дайджеста, используя указанный массив байтов, затем завершает вычисление дайджеста. |
int | digest(byte[] buf,
int offset,
int len) | Завершает вычисление хеша, выполняя окончательные операции, такие как заполнение. |
String | getAlgorithm() | Возвращает строку, идентифицирующую алгоритм, независимо от деталей реализации. |
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, реализующий указанный алгоритм дайджеста. |
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) | Обновляет дайджест, используя указанный массив байтов, начиная с указанного смещения. |
void | update(ByteBuffer input) | Обновляет дайджест, используя указанный ByteBuffer. |
Методы, объявленные в классе java.security.MessageDigestSpi
engineDigest, engineDigest, engineGetDigestLength, engineReset, engineUpdate, engineUpdate, engineUpdate Методы, объявленные в классе java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Краткое описание конструкторов
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(). - Параметры:
-
algorithm- имя запрашиваемого алгоритма. См. раздел MessageDigest в спецификации стандартных имён алгоритмов безопасности Java для получения информации о стандартных именах алгоритмов. - Возвращает:
- объект
MessageDigest, который реализует указанный алгоритм - Исключения:
-
NoSuchAlgorithmException- если ни одинProviderне поддерживает реализациюMessageDigestSpiдля указанного алгоритма -
NullPointerException- еслиalgorithmявляетсяnull - См. также:
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 - См. также:
Provider
getInstance
public static MessageDigest getInstance(String algorithm,
Provider provider)
throws NoSuchAlgorithmException Возвращает объект MessageDigest, который реализует указанный алгоритм дайджеста.
Возвращается новый объект MessageDigest, инкапсулирующий реализацию MessageDigestSpi из указанного объекта Provider. Обратите внимание, что указанный объект Provider не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
algorithm- имя запрашиваемого алгоритма. См. раздел MessageDigest в спецификации стандартных имён алгоритмов безопасности Java для получения информации о стандартных именах алгоритмов. -
provider- поставщик. - Возвращает:
- объект
MessageDigest, который реализует указанный алгоритм - Исключения:
-
IllegalArgumentException- если указанный поставщикnull -
NoSuchAlgorithmException- если реализацияMessageDigestSpiдля указанного алгоритма недоступна из указанного объектаProvider -
NullPointerException- еслиalgorithmявляетсяnull - С версии:
- 1.4
- См. также:
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()
Возвращает строковое представление этого объекта дайджеста сообщения.
isEqual
public static boolean isEqual(byte[] digesta,
byte[] digestb) Сравнивает два дайджеста на равенство. Два дайджеста равны, если они имеют одинаковую длину и все байты в соответствующих позициях равны.
- Примечание по реализации:
- Все байты в
digestaпроверяются на равенство. Время вычисления зависит только от длиныdigesta. Оно не зависит от длиныdigestbили содержимогоdigestaиdigestb. - Параметры:
-
digesta- один из дайджестов для сравнения. -
digestb- другой дайджест для сравнения. - Возвращает:
- true, если дайджесты равны, false в противном случае.
reset
public void reset()
Сбрасывает дайджест для дальнейшего использования.
getAlgorithm
public final String getAlgorithm()
Возвращает строку, которая идентифицирует алгоритм независимо от деталей реализации. Имя должно быть стандартным именем безопасности Java (например, "SHA-256"). См. раздел MessageDigest в спецификации стандартных имён алгоритмов безопасности Java для получения информации о стандартных именах алгоритмов.
- Возвращает:
- имя алгоритма
getDigestLength
public final int getDigestLength()
Возвращает длину дайджеста в байтах или 0, если эта операция не поддерживается поставщиком и реализация не клонируема.
- Возвращает:
- длину дайджеста в байтах или 0, если эта операция не поддерживается поставщиком и реализация не клонируема.
- С версии:
- 1.2
clone
public Object clone()
throws CloneNotSupportedException Возвращает клон, если реализация клонируема.
- Переопределяет:
-
cloneв классеMessageDigestSpi - Возвращает:
- клон, если реализация клонируема.
- Исключения:
-
CloneNotSupportedException- если это вызывается для реализации, которая не поддерживаетCloneable. - См. также:
Cloneable
© 1993, 2020, 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/11/docs/api/java.base/java/security/MessageDigest.html