Ашық кілтті шифрлау
Автор: Альхам Тлеукеш • Июнь 5, 2024 • Лабораторная работа • 1,500 Слов (6 Страниц) • 40 Просмотры
[pic 1]
«Цифралық технологиялар мектебі»
6-зертханалық жұмыс
“Ашық кілтті шифрлау”
Дисциплина: “Криптографияға кіріспе”
Орындаған:Тлеукеш Альхам
2-ші курс студенті
Мамандық: Digital Engineering
Тексерген: Байдулла Аяулым Мейірханқызыай
Алматы
2024
CODE:JAVA
import java.util.Scanner;
import java.math.BigInteger;
public class RSA {
// Санның қарапайым екенін тексеруге арналған Функция
public static boolean isPrime(BigInteger n) {
if (n.compareTo(BigInteger.ONE) <= 0) {
return false;
}
if (n.compareTo(new BigInteger("2")) == 0) {
return true;
}
if (n.mod(new BigInteger("2")).equals(BigInteger.ZERO)) {
return false;
}
BigInteger sqrt = n.sqrt().add(BigInteger.ONE);
for (BigInteger i = new BigInteger("3"); i.compareTo(sqrt) < 0; i = i.add(new BigInteger("2"))) {
if (n.mod(i).equals(BigInteger.ZERO)) {
return false;
}
}
return true;
}
// Екі санның ең үлкен ортақ бөлгішін табу функциясы
public static BigInteger gcd(BigInteger a, BigInteger b) {
return b.equals(BigInteger.ZERO) ? a : gcd(b, a.mod(b));
}
// E ашық кілтін құру функциясы
public static BigInteger findE(BigInteger phi) {
BigInteger e = new BigInteger("2");
while (e.compareTo(phi) < 0 && !gcd(e, phi).equals(BigInteger.ONE)) {
e = e.add(BigInteger.ONE);
}
return e;
}
// Модуль бойынша мультипликативті кері санды табу функциясы
public static BigInteger modInverse(BigInteger a, BigInteger m) {
BigInteger m0 = m;
BigInteger y = new BigInteger("0");
BigInteger x = new BigInteger("1");
if (m.equals(BigInteger.ONE)) {
return BigInteger.ZERO;
}
while (a.compareTo(BigInteger.ONE) > 0) {
BigInteger q = a.divide(m);
BigInteger t = m;
m = a.mod(m);
a = t;
t = y;
y = x.subtract(q.multiply(y));
x = t;
}
if (x.compareTo(BigInteger.ZERO) < 0) {
x = x.add(m0);
}
return x;
}
// Хабарламаны шифрлау функциясы
public static BigInteger encrypt(BigInteger message, BigInteger e, BigInteger n) {
return message.modPow(e, n);
}
// Хабарламаның шифрын ашуға арналған Функция
public static BigInteger decrypt(BigInteger encryptedMessage, BigInteger d, BigInteger n) {
return encryptedMessage.modPow(d, n);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// P және q жай сандарын енгізу және тексеру
System.out.print("Введите простое число p: ");
BigInteger p = scanner.nextBigInteger();
while (!isPrime(p)) {
System.out.print("Число p не является простым. Пожалуйста, введите простое число: ");
p = scanner.nextBigInteger();
}
System.out.print("Введите простое число q: ");
BigInteger q = scanner.nextBigInteger();
while (!isPrime(q)) {
System.out.print("Число q не является простым. Пожалуйста, введите простое число: ");
q = scanner.nextBigInteger();
}
// N есептеу
BigInteger n = p.multiply(q);
BigInteger phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
// Ашық кілтті енгізу және тексеру e
BigInteger e;
do {
System.out.print("Введите значение e: ");
e = scanner.nextBigInteger();
} while (!gcd(e, phi).equals(BigInteger.ONE));
...