Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Ymerla
0 / 0 / 1
Регистрация: 25.06.2012
Сообщений: 62
1

Цифровая подпись dsa. Найти ошибки в коде

23.12.2013, 20:10. Просмотров 1198. Ответов 13
Метки нет (Все метки)

помогите найти ошибки(((
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//GSig.java
/* Генерация DSA-подписи */
 
import java.io.*;
import java.security.*;
class GSig 
{
 //сохранение байтового массива в файл
public static void saveToFile (byte[] info, 
String filename)
{
try
{
FileOutputStream fos = new FileOutputStream
(filename);
fos.write(info);
fos.close();
}
catch (Exception e) 
{
System.err.println(“Caught exception “ + e.toString());
}
}// saveToFile ()
 
public static void main(String args[]) 
{
try
{
/* Генерация ключей */
KeyPairGenerator keyGen = 
KeyPairGenerator.getInstance(“DSA”, “SUN”);
SecureRandom random = 
SecureRandom.getInstance(“SHA1PRNG”, “SUN”);
 keyGen.initialize(1024, random);
 KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
 /* Создание объекта класса Signature */
 Signature dsa = 
Signature.getInstance(“SHA1withDSA”, “SUN”); 
/* Инициализация частным ключом */
dsa.initSign(priv);
 /* Чтение данных из файла “data”. Вызов метода update() */
 FileInputStream fis = new FileInputStream(“data”);
BufferedInputStream bufin = 
new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) 
{
len = bufin.read(buffer);
dsa.update(buffer, 0, len);
}
bufin.close();
 /* Генерация подписи */
byte[] realSig = dsa.sign();
 /* Сохранение подписи в файл “signature” */
saveToFile (realSig,”signature”);
 /* Сохранение открытого ключа в файл “pubkey” */
byte[] key = pub.getEncoded();
saveToFile (key,”pubkey”);
} 
 catch (Exception e) 
{
System.err.println(“Caught exception “ + e.toString());
}
 }// main()
}// class GSig
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* Верификация DSA-подписи */
import java.io.*;
import java.security.*;
import java.security.spec.*;
class VSig 
{
 //чтение из файла в байтовый массив
public static byte[] readFromFile (String fileName)
{
byte[] info;
try
{
FileInputStream fis = 
new FileInputStream(fileName);
info = new byte[fis.available()];
fis.read(info);
fis.close();
}
catch (Exception e)
{
System.err.println(“Caught exception “ + e.toString());
info = new byte[0];
}
return(info);
}// copyFromFile ()
 public static void main(String args[]) 
{
try
{
/* Получение encoded public key из файла “pubkey” */
byte[] encKey = readFromFile(“pubkey”);
 
/* Создание спецификации ключа */
X509EncodedKeySpec pubKeySpec = 
new X509EncodedKeySpec(encKey);
 /* Создание объектов Лунафсещкн и ЗгидшсЛун*/
KeyFactory keyFactory = KeyFactory.getInstance (“DSA”, “SUN”);
PublicKey pubKey = keyFactory.generatePublic
(pubKeySpec);
 /* Чтение подписи из файла “signature” */
byte[] sigToVerify = readFromFile(“signature”);
 /* Создание объекта класса Signature и инициализация с помощью открытого ключа    */
Signature sig = Signature.getInstance (“SHA1withDSA”, “SUN”);
sig.initVerify(pubKey);
 /* Чтение данных из файла “data” и вызов метода update() */
FileInputStream datafis = new FileInputStream (“data”);
BufferedInputStream bufin = 
new BufferedInputStream(datafis);
byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) 
{
len = bufin.read(buffer);
sig.update(buffer, 0, len);
}
bufin.close();
 /* Верификация */
boolean verifies = sig.verify(sigToVerify);
 System.out.println(Signature verifies: “ + verifies);
}
 catch (Exception e) 
{
System.err.println(“Caught exception “ + e.toString());
}
}// main() 
}// class VSig
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2013, 20:10
Ответы с готовыми решениями:

Найти ошибки в коде
package javaapplication1; import java.util.Scanner; public class...

Найти ошибки в коде
Все привет! Помогите найти ошибки в коде, не которые уже ошибки сам нашел, но...

Ошибки в коде
Дело такое, есть код, как его надо исправить, чтобы он работал корректно при...

Ошибки в коде
Нужно написать программу, которая спрашивает у пользователя его имя и возраст;...

Ошибки в коде
програма, что выдаёт информацию о находжении точки выдаёт ошибку, где...

13
LighterV
4 / 4 / 0
Регистрация: 08.08.2013
Сообщений: 48
24.12.2013, 14:08 2
Если заменить кавычки “” на "", то должно работать.
0
Ymerla
0 / 0 / 1
Регистрация: 25.06.2012
Сообщений: 62
03.01.2014, 00:14  [ТС] 3
Цитата Сообщение от LighterV Посмотреть сообщение
Если заменить кавычки “” на "", то должно работать.
я исправила все кавычки. вроде как компилируется,а когда запускаю пишет такие вещи(((
когда запускаю GSig.java, то пишет
Caught exception java.io.FileNotFoundException: data (=х ефрхЕё эрщЕш еърчрээ˩щ Iрщы)

когда запускаю VSig.java, то пишет
Caught exception java.io.FileNotFoundException: pubkey (=х ефрхЕё эрщЕш еърчрээ˩щ Iрщы)
Caught exception java.security.spec.InvalidKeySpecException: Inappropriate key s pecification:
IOException: DerInputStream.getLength(): lengthTag=127, too big.
0
IceSqueez
Java, C# - Expert
67 / 67 / 12
Регистрация: 09.08.2011
Сообщений: 284
03.01.2014, 04:34 4
Все правильно,
Цитата Сообщение от Ymerla Посмотреть сообщение
(=х ефрхЕё эрщЕш еърчрээ˩щ Iрщы)
это значить не могу найти файл...
В первом классе
Java
1
FileInputStream fis = new FileInputStream(“data”);
Во втором классе
Java
1
byte[] encKey = readFromFile(“pubkey”);
0
Ymerla
0 / 0 / 1
Регистрация: 25.06.2012
Сообщений: 62
03.01.2014, 11:21  [ТС] 5
Цитата Сообщение от IceSqueez Посмотреть сообщение
Все правильно,
это значить не могу найти файл...
В первом классе
Java
1
FileInputStream fis = new FileInputStream(“data”);
Во втором классе
Java
1
byte[] encKey = readFromFile(“pubkey”);
А как это исправить? Я просто впервые с JAVA столкнулась и не понимаю
0
LighterV
4 / 4 / 0
Регистрация: 08.08.2013
Сообщений: 48
03.01.2014, 12:13 6
Цитата Сообщение от IceSqueez Посмотреть сообщение
Все правильно,
Сообщение от Ymerla
(=х ефрхЕё эрщЕш еърчрээ˩щ Iрщы)
это значить не могу найти файл...
В первом классе
Да, файл найти не может, но не по той причине, которую указали вы.


Цитата Сообщение от Ymerla Посмотреть сообщение
А как это исправить? Я просто впервые с JAVA столкнулась и не понимаю
В файле с проектом создать файл data (без расширения). Или исправить класс GSig на этот:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class GSig {
    // сохранение байтового массива в файл
    public static void saveToFile(byte[] info, String filename) {
        try {
            FileOutputStream fos = new FileOutputStream(filename);
            fos.write(info);
            fos.close();
        } catch (Exception e) {
            System.err.println("Caught exception " + e.toString());
        }
    }// saveToFile ()
 
    public static void main(String args[]) {
        try {
            /* Генерация ключей */
            KeyPairGenerator keyGen = KeyPairGenerator
                    .getInstance("DSA", "SUN");
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
            keyGen.initialize(1024, random);
            KeyPair pair = keyGen.generateKeyPair();
            PrivateKey priv = pair.getPrivate();
            PublicKey pub = pair.getPublic();
            /* Создание объекта класса Signature */
            Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
            /* Инициализация частным ключом */
            dsa.initSign(priv);
            
            byte[] data = "data".getBytes();
            dsa.update(data);
            saveToFile(data, "data");
            
            /* Генерация подписи */
            byte[] realSig = dsa.sign();
            /* Сохранение подписи в файл "signature" */
            saveToFile(realSig, "signature");
            /* Сохранение открытого ключа в файл "pubkey" */
            byte[] key = pub.getEncoded();
            saveToFile(key, "pubkey");
        } catch (Exception e) {
            System.err.println("Caught exception " + e.toString());
        }
    }// main()
}// class GSig
Отличие от вашего класса лишь в том, что данные не читаются из файла data, а задаются прямо в коде в массиве byte[] data, а затем записываются в файл data.
0
IceSqueez
Java, C# - Expert
67 / 67 / 12
Регистрация: 09.08.2011
Сообщений: 284
03.01.2014, 14:17 7
Цитата Сообщение от LighterV Посмотреть сообщение
Да, файл найти не может, но не по той причине, которую указали вы.
Код запускался у меня в IDEA, что мне выбило я то и написал, с неба я этого не брал.
0
Ymerla
0 / 0 / 1
Регистрация: 25.06.2012
Сообщений: 62
06.01.2014, 12:44  [ТС] 8
Цитата Сообщение от LighterV Посмотреть сообщение
В файле с проектом создать файл data (без расширения).
все получилось когда создала файл. спасибо.
а теперь к этой задаче нужно написать уникальный код который можно ввести только на одном компьютере(как я поняла это что то вроде лицензионного ключа) помогите пожалуйста
0
Ymerla
0 / 0 / 1
Регистрация: 25.06.2012
Сообщений: 62
07.01.2014, 14:21  [ТС] 9
точнее нужно защитить от копирования. как это можно сделать?
0
Skipy
1996 / 1419 / 91
Регистрация: 25.11.2010
Сообщений: 3,611
09.01.2014, 16:11 10
Цитата Сообщение от Ymerla Посмотреть сообщение
точнее нужно защитить от копирования. как это можно сделать?
Боже мой! Вот так просто и ненавязчиво - защитить от копирования.

Задача защиты от копирования, имхо, на сегоднящний день самая сложная из существующих. И всё еще не решенная окончательно. Можно лишь затруднить копирование, сделав взлом дороже покупки.
0
Ymerla
0 / 0 / 1
Регистрация: 25.06.2012
Сообщений: 62
09.01.2014, 17:01  [ТС] 11
Цитата Сообщение от Skipy Посмотреть сообщение
Боже мой! Вот так просто и ненавязчиво - защитить от копирования.

Задача защиты от копирования, имхо, на сегоднящний день самая сложная из существующих. И всё еще не решенная окончательно. Можно лишь затруднить копирование, сделав взлом дороже покупки.
а вы можете мне помочь?
0
Ymerla
0 / 0 / 1
Регистрация: 25.06.2012
Сообщений: 62
20.01.2014, 14:36  [ТС] 12
помогите пожалуйста, преподу все мало, и он просит чтобы было написано не только что подпись проходит, а что где проверяет программа , все все должно писаться. (вдруг, говорит, вы просто написали что проверка проходит и это на экран выводится и ничего не проверяется)а я не понимаю как это сделать.очень нужна ваша помощь
0
Skipy
1996 / 1419 / 91
Регистрация: 25.11.2010
Сообщений: 3,611
20.01.2014, 16:34 13
А кто Вам мешает написать всё, что требует преподаватель, но без реальных проверок? Это изначально неправильная постановка вопроса. Никакой вывод на консоль не может служить доказательством, что приложение что-то делает. Доказательством может служить только набор тестов, написанных преподавателем. Убрали файл с ключем - приложение выдало сообщение и остановилось. Изменили файл - получили ошибку подписи. И т.п.

А простой вывод ничего не докажет.
0
LighterV
4 / 4 / 0
Регистрация: 08.08.2013
Сообщений: 48
21.01.2014, 11:06 14
Согласен со Skypy, но раз у вас такой "препод", то вот:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import java.io.*;
import java.security.*;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
 
class GSig {
    // сохранение байтового массива в файл
    public static void saveToFile(byte[] info, String filename) {
        try {
            FileOutputStream fos = new FileOutputStream(filename);
            fos.write(info);
            fos.close();
        } catch (Exception e) {
            System.err.println("Caught exception " + e.toString());
        }
    }// saveToFile ()
 
    public static void main(String args[]) {
        System.out.println("\n\nСоздание подписи");
        try {
            /* Генерация ключей */
            
            System.out.println("Генерация ключей");
            KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
            keyGen.initialize(1024, random);
            
            KeyPair pair = keyGen.generateKeyPair();
            PrivateKey priv = pair.getPrivate();
            PublicKey pub = pair.getPublic();
            
            System.out.println("Ключи сгенерированы. Открытый ключ = " + Arrays.toString(pub.getEncoded()));
            
            /* Создание объекта класса Signature */
            Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
            /* Инициализация частным ключом */
            dsa.initSign(priv);
            
            byte[] data = "data".getBytes();
            dsa.update(data);
            saveToFile(data, "data");
            
            System.out.println("Подпись сообщения. Сообщение = " + Arrays.toString(data));
            /* Генерация подписи */
            byte[] realSig = dsa.sign();
            
            System.out.println("Подпись выработана. Подпись = " + Arrays.toString(realSig));
            
            /* Сохранение подписи в файл "signature" */
            saveToFile(realSig, "signature");
            /* Сохранение открытого ключа в файл "pubkey" */
            byte[] key = pub.getEncoded();
            saveToFile(key, "pubkey");
        } catch (Exception e) {
            System.err.println("Caught exception " + e.toString());
        }
    }// main()
}// class GSig
 
class VSig {
    // чтение из файла в байтовый массив
    public static byte[] readFromFile(String fileName) {
        byte[] info;
        try {
            FileInputStream fis = new FileInputStream(fileName);
            info = new byte[fis.available()];
            fis.read(info);
            fis.close();
        } catch (Exception e) {
            System.err.println("Caught exception " + e.toString());
            info = new byte[0];
        }
        return (info);
    }// copyFromFile ()
 
    public static void main(String args[]) {
        System.out.println("\n\nПроверка подписи");
        try {
            /* Получение encoded public key из файла "pubkey" */
            byte[] encKey = readFromFile("pubkey");
            
            System.out.println("Чтение ключа из файла. Открытый ключ = " + Arrays.toString(encKey));
 
            /* Создание спецификации ключа */
            X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);
            /* Создание объектов Лунафсещкн и ЗгидшсЛун */
            KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");
            PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);
            /* Чтение подписи из файла "signature" */
            byte[] sigToVerify = readFromFile("signature");
            
            System.out.println("Чтение подписи из файла. Подпись = " + Arrays.toString(sigToVerify));
            
            /*
             * Создание объекта класса Signature и инициализация с помощью
             * открытого ключа
             */
            Signature sig = Signature.getInstance("SHA1withDSA", "SUN");
            sig.initVerify(pubKey);
            /* Чтение данных из файла "data" и вызов метода update() */
            FileInputStream datafis = new FileInputStream("data");
            BufferedInputStream bufin = new BufferedInputStream(datafis);
            byte[] buffer = new byte[1024];
            int len;
            while (bufin.available() != 0) {
                len = bufin.read(buffer);
                sig.update(buffer, 0, len);
            }
            bufin.close();
            /* Верификация */
            boolean verifies = sig.verify(sigToVerify);
            System.out.println("Signature verifies: " + verifies);
        } catch (Exception e) {
            System.err.println("Caught exception " + e.toString());
        }
    }// main()
}// class VSig
1
21.01.2014, 11:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2014, 11:06

Не могу найти в коде бесконечный цикл (Если таковой в коде имеется.)
/** * Created by Drath on 04.08.14. */ var mygram = { words: , ...

Исправить ошибки в коде
Здравствуйте! Помогите, пожалуйста, исправить ошибки: public class ClassA {...

Ошибки в коде Java
Ошибки: Exception in thread "main" java.lang.IllegalArgumentException: У нас...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru