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

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Что выведет код?

public class Task240225 {
public static void main(String[] args) {
Integer a = 1000;
int b = 1000;
Integer c = Integer.valueOf(1000);
Integer d = Integer.valueOf(1000);

System.out.println(a == b);
System.out.println(a == c);
System.out.println(c == d);
System.out.println(a.equals(d));
}
}


#Tasks
👍1
Слишком жизненно...😂 😜

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2😁1
Вопросы с собеседования 👩‍💻

Какой метод используется для получения текущей даты?
Anonymous Quiz
17%
Date.getCurrent()
12%
Calendar.getInstance()
7%
System.getDate()
👍1
Java Crypto API

Классы SecretKey и IvParameterSpec

1. Класс SecretKey (работа с симметричными ключами)
Класс SecretKey представляет собой интерфейс, который используется для работы с симметричными ключами. Он является частью Java Cryptography Architecture (JCA) и реализуется классами, предоставляемыми провайдерами безопасности (например, SecretKeySpec).

Как работает SecretKey под капотом?
SecretKey — это интерфейс, который расширяет интерфейс Key. Он предоставляет методы для получения закодированного представления ключа и информации о его алгоритме.
Реализация SecretKey (например, SecretKeySpec) хранит ключ в виде массива байт и предоставляет методы для доступа к этим данным.


Основные методы SecretKey

getEncoded(): Возвращает закодированное представление ключа в виде массива байт.
getAlgorithm(): Возвращает имя алгоритма, для которого предназначен ключ (например, "AES").
getFormat(): Возвращает формат, в котором закодирован ключ (например, "RAW").


Пример использования SecretKey
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class SecretKeyExample {
public static void main(String[] args) throws Exception {
// Генерация ключа с помощью KeyGenerator
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128-битный ключ
SecretKey secretKey = keyGen.generateKey();

// Получение закодированного ключа
byte[] keyBytes = secretKey.getEncoded();
System.out.println("Key (Base64): " + Base64.getEncoder().encodeToString(keyBytes));

// Получение информации о ключе
System.out.println("Algorithm: " + secretKey.getAlgorithm());
System.out.println("Format: " + secretKey.getFormat());
}
}


Плюсы и минусы SecretKey

Плюсы:
Универсальный интерфейс для работы с симметричными ключами.
Поддерживает различные алгоритмы шифрования.


Минусы:
Ключи должны храниться безопасно (например, в KeyStore).
Не подходит для асимметричных ключей.


2. Класс IvParameterSpec (векторы инициализации)
Класс IvParameterSpec используется для работы с векторами инициализации (IV), которые необходимы для некоторых режимов шифрования, таких как CBC (Cipher Block Chaining) или GCM (Galois/Counter Mode).

Как работает IvParameterSpec под капотом?
Вектор инициализации (IV) — это случайное значение, которое используется для обеспечения уникальности шифрования даже при использовании одного и того же ключа.
IvParameterSpec — это простая обертка вокруг массива байт, представляющего IV.


#Java #Training #Medium #Java_Crypto_API #SecretKey #IvParameterSpec
👍1
Основные методы IvParameterSpec

IvParameterSpec(byte[] iv): Создает объект IvParameterSpec с указанным вектором инициализации.
getIV(): Возвращает вектор инициализации в виде массива байт.


Пример использования IvParameterSpec

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.security.SecureRandom;
import java.util.Base64;

public class IvParameterSpecExample {
public static void main(String[] args) throws Exception {
// Генерация ключа
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128-битный ключ
SecretKey secretKey = keyGen.generateKey();

// Генерация вектора инициализации
byte[] iv = new byte[16]; // 16 байт для AES
SecureRandom random = new SecureRandom();
random.nextBytes(iv);
IvParameterSpec ivSpec = new IvParameterSpec(iv);

// Шифрование с использованием IV
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);

String originalText = "Hello, Java Crypto!";
byte[] encryptedBytes = cipher.doFinal(originalText.getBytes());
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encryptedBytes));

// Дешифрование с использованием IV
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
System.out.println("Decrypted: " + new String(decryptedBytes));
}
}


Плюсы и минусы IvParameterSpec

Плюсы:
Обеспечивает уникальность шифрования даже при использовании одного ключа.
Простота использования.


Минусы:
IV должен быть случайным и уникальным для каждого шифрования.
IV должен передаваться вместе с зашифрованными данными.


#Java #Training #Medium #Java_Crypto_API #SecretKey #IvParameterSpec
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#Mems. Позитива и мотивации в ленту.
😁3💯2🥰1
📌 Факт дня:

А вы знали, что в 1971 году была изобретена электронная почта?

Но никто не знал, как сказать "@" по телефону! В итоге одни называли его "улиткой", другие "кошачьим хвостом".


Proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
📌 Цитата дня: Маргарет Гамильтон

"Программирование — это искусство предвидеть все возможные ошибки."


Гамильтон, пионер программирования и разработчик ПО для миссии "Аполлон", сказала это в интервью MIT в 2016 году.

Почитать короткую биографию
И еще немного интересного

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Java Crypto API

Классы KeyPairGenerator и KeyPair

Класс KeyPairGenerator (генерация асимметричных ключей)

Класс KeyPairGenerator используется для генерации пары асимметричных ключей: открытого (public key) и закрытого (private key). Эти ключи применяются в асимметричных алгоритмах, таких как RSA, DSA и ECDSA.

Как работает KeyPairGenerator под капотом?
KeyPairGenerator использует криптографически безопасные генераторы случайных чисел (CSPRNG) для создания ключей.
Внутри он генерирует два связанных ключа: открытый (для шифрования или проверки подписи) и закрытый (для дешифрования или создания подписи).
Размер ключа зависит от алгоритма (например, 2048 или 4096 бит для RSA).


Основные методы KeyPairGenerator

getInstance(String algorithm): Создает экземпляр KeyPairGenerator для указанного алгоритма (например, "RSA").
initialize(int keysize): Устанавливает размер ключа.
generateKeyPair(): Генерирует пару ключей (открытый и закрытый).


Пример использования KeyPairGenerator
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64;

public class KeyPairGeneratorExample {
public static void main(String[] args) throws Exception {
// Создание KeyPairGenerator для RSA
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048); // 2048-битный ключ

// Генерация пары ключей
KeyPair keyPair = keyPairGen.generateKeyPair();

// Получение открытого и закрытого ключей
byte[] publicKey = keyPair.getPublic().getEncoded();
byte[] privateKey = keyPair.getPrivate().getEncoded();

System.out.println("Public Key (Base64): " + Base64.getEncoder().encodeToString(publicKey));
System.out.println("Private Key (Base64): " + Base64.getEncoder().encodeToString(privateKey));
}
}


Плюсы и минусы KeyPairGenerator

Плюсы:
Поддержка различных асимметричных алгоритмов (RSA, DSA, ECDSA).
Простота генерации ключей.


Минусы:
Генерация ключей может быть медленной для больших размеров (например, 4096 бит).
Ключи должны храниться безопасно (например, в KeyStore).


Класс KeyPair (работа с асимметричными ключами)

Класс KeyPair представляет собой контейнер для пары асимметричных ключей: открытого и закрытого. Он используется вместе с KeyPairGenerator и другими классами, такими как Signature и Cipher.

Как работает KeyPair под капотом?
KeyPair содержит два объекта: PublicKey и PrivateKey.
Эти ключи используются в асимметричных операциях, таких как шифрование/дешифрование или создание/проверка цифровых подписей.

Основные методы KeyPair

getPublic(): Возвращает открытый ключ.
getPrivate(): Возвращает закрытый ключ.

Пример использования KeyPair
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;

public class KeyPairExample {
public static void main(String[] args) throws Exception {
// Генерация пары ключей
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048);
KeyPair keyPair = keyPairGen.generateKeyPair();

// Получение открытого и закрытого ключей
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();

System.out.println("Public Key Algorithm: " + publicKey.getAlgorithm());
System.out.println("Private Key Format: " + privateKey.getFormat());
}
}


Плюсы и минусы KeyPair

Плюсы:
Удобный контейнер для работы с парой ключей.
Поддерживает различные алгоритмы.


Минусы:
Ключи должны храниться безопасно.
Не подходит для симметричных ключей.


#Java #Training #Medium #Java_Crypto_API #KeyPairGenerator #KeyPair
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
айтишник отказался от зарплаты в 950 тысяч рублей, потому что… ЖЕНА БЫ НЕ ПОНЯЛА зарплату меньше миллиона.

https://t.me/Java_for_beginner_dev

#Mems
👍3🤔1
Что выведет код?

public class Task250225 {
public static void main(String[] args) {
byte b = (byte) 200;
int i = b + 100;
double d = (double) i / 300;

System.out.println(b);
System.out.println(i);
System.out.println(d);
}
}


#Tasks
👍2
Все сеньоры когда-то были джунами...😂 🤣

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😁2
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
👍2
Плюсы и минусы MessageDigest

Плюсы:

Обеспечивает целостность данных.
Поддерживает различные алгоритмы (SHA-256, MD5, SHA-1).


Минусы:

Хэш-функции устаревают (например, MD5 и SHA-1 считаются небезопасными).
Не подходит для шифрования данных.


#Java #Training #Medium #Java_Crypto_API #Signature #MessageDigest
👍1
#Mems. Все мы немного этот котик
💯3
📌 Факт дня:

А вы знали, что самая длинная клавиатурная комбинация в истории была в игре "The Simpsons: Hit & Run"?

Для входа в режим отладки игроку нужно было нажать F1 + F2 + F3 + F4 + Enter + V + Insert + Right Shift + Right Ctrl + Delete + End + Page Down. Попробуйте повторить!


Пруфа нет 🤪

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔2👍1
📌 Цитата дня: Ада Лавлейс

"Машина может делать всё, что можно выразить математически."


Лавлейс написала это в своих заметках к работе Чарльза Бэббиджа в 1843 году. Она считается одним из первых программистов.

Почитать короткую биографию
Интересное..

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Все знают, что он существует, но лично никто не видел...

https://t.me/Java_for_beginner_dev

#Mems
😁1