Java for Beginner
675 subscribers
546 photos
155 videos
12 files
838 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
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
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