Java Crypto API
Класс Signature (цифровые подписи)
Класс Signature используется для создания и проверки цифровых подписей. Цифровая подпись обеспечивает целостность данных и аутентификацию отправителя.
Как работает Signature под капотом?
Signature использует асимметричные алгоритмы (например, RSA, DSA, ECDSA) для создания и проверки подписей.
Процесс состоит из двух этапов:
Создание подписи: Закрытый ключ используется для создания подписи.
Проверка подписи: Открытый ключ используется для проверки подписи.
Основные методы Signature
getInstance(String algorithm): Создает экземпляр Signature для указанного алгоритма (например, "SHA256withRSA").
initSign(PrivateKey privateKey): Инициализирует объект для создания подписи с использованием закрытого ключа.
initVerify(PublicKey publicKey): Инициализирует объект для проверки подписи с использованием открытого ключа.
update(byte[] data): Обновляет данные для подписи или проверки.
sign(): Создает подпись.
verify(byte[] signature): Проверяет подпись.
Пример использования Signature
Плюсы и минусы Signature
Плюсы:
Обеспечивает целостность данных и аутентификацию.
Поддерживает различные алгоритмы (RSA, DSA, ECDSA).
Минусы:
Требует наличия пары ключей (открытый и закрытый).
Может быть медленным для больших данных.
Класс MessageDigest (хэш-функции)
Класс MessageDigest используется для вычисления хэш-значений данных. Хэш-функции применяются для обеспечения целостности данных и создания уникальных идентификаторов.
Как работает MessageDigest под капотом?
MessageDigest использует криптографические хэш-функции (например, SHA-256, MD5) для преобразования данных в фиксированный размер хэш-значения.
Хэш-функции являются односторонними: из хэша нельзя восстановить исходные данные.
Основные методы MessageDigest
getInstance(String algorithm): Создает экземпляр MessageDigest для указанного алгоритма (например, "SHA-256").
update(byte[] input): Обновляет данные для хэширования.
digest(): Вычисляет хэш-значение.
digest(byte[] input): Вычисляет хэш-значение для указанных данных.
Пример использования MessageDigest
#Java #Training #Medium #Java_Crypto_API #Signature #MessageDigest
Класс Signature (цифровые подписи)
Класс Signature используется для создания и проверки цифровых подписей. Цифровая подпись обеспечивает целостность данных и аутентификацию отправителя.
Как работает Signature под капотом?
Signature использует асимметричные алгоритмы (например, RSA, DSA, ECDSA) для создания и проверки подписей.
Процесс состоит из двух этапов:
Создание подписи: Закрытый ключ используется для создания подписи.
Проверка подписи: Открытый ключ используется для проверки подписи.
Основные методы Signature
getInstance(String algorithm): Создает экземпляр Signature для указанного алгоритма (например, "SHA256withRSA").
initSign(PrivateKey privateKey): Инициализирует объект для создания подписи с использованием закрытого ключа.
initVerify(PublicKey publicKey): Инициализирует объект для проверки подписи с использованием открытого ключа.
update(byte[] data): Обновляет данные для подписи или проверки.
sign(): Создает подпись.
verify(byte[] signature): Проверяет подпись.
Пример использования Signature
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
public class SignatureExample {
public static void main(String[] args) throws Exception {
// Генерация пары ключей
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048);
KeyPair keyPair = keyPairGen.generateKeyPair();
// Получение ключей
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
// Создание подписи
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
String data = "Hello, Java Crypto!";
signature.update(data.getBytes());
byte[] digitalSignature = signature.sign();
System.out.println("Digital Signature (Base64): " + Base64.getEncoder().encodeToString(digitalSignature));
// Проверка подписи
signature.initVerify(publicKey);
signature.update(data.getBytes());
boolean isVerified = signature.verify(digitalSignature);
System.out.println("Signature Verified: " + isVerified);
}
}
Плюсы и минусы Signature
Плюсы:
Обеспечивает целостность данных и аутентификацию.
Поддерживает различные алгоритмы (RSA, DSA, ECDSA).
Минусы:
Требует наличия пары ключей (открытый и закрытый).
Может быть медленным для больших данных.
Класс MessageDigest (хэш-функции)
Класс MessageDigest используется для вычисления хэш-значений данных. Хэш-функции применяются для обеспечения целостности данных и создания уникальных идентификаторов.
Как работает MessageDigest под капотом?
MessageDigest использует криптографические хэш-функции (например, SHA-256, MD5) для преобразования данных в фиксированный размер хэш-значения.
Хэш-функции являются односторонними: из хэша нельзя восстановить исходные данные.
Основные методы MessageDigest
getInstance(String algorithm): Создает экземпляр MessageDigest для указанного алгоритма (например, "SHA-256").
update(byte[] input): Обновляет данные для хэширования.
digest(): Вычисляет хэш-значение.
digest(byte[] input): Вычисляет хэш-значение для указанных данных.
Пример использования MessageDigest
import java.security.MessageDigest;
import java.util.Base64;
public class MessageDigestExample {
public static void main(String[] args) throws Exception {
// Создание MessageDigest для SHA-256
MessageDigest digest = MessageDigest.getInstance("SHA-256");
// Хэширование данных
String data = "Hello, Java Crypto!";
byte[] hash = digest.digest(data.getBytes());
// Вывод хэша в Base64
System.out.println("Hash (Base64): " + Base64.getEncoder().encodeToString(hash));
}
}
#Java #Training #Medium #Java_Crypto_API #Signature #MessageDigest
Плюсы и минусы MessageDigest
Плюсы:
Обеспечивает целостность данных.
Поддерживает различные алгоритмы (SHA-256, MD5, SHA-1).
Минусы:
Хэш-функции устаревают (например, MD5 и SHA-1 считаются небезопасными).
Не подходит для шифрования данных.
#Java #Training #Medium #Java_Crypto_API #Signature #MessageDigest
Плюсы:
Обеспечивает целостность данных.
Поддерживает различные алгоритмы (SHA-256, MD5, SHA-1).
Минусы:
Хэш-функции устаревают (например, MD5 и SHA-1 считаются небезопасными).
Не подходит для шифрования данных.
#Java #Training #Medium #Java_Crypto_API #Signature #MessageDigest