Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2012, 09:05   #1
artem611
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 40
По умолчанию Не удаляется файл [Java]

Всем привет.
Препод задал написать цифровую подпись Шнорра. Все параметры и сообщение должны считываться и записываться в файл. Вообщем-то, я написал программу.
Функция для генерации параметров
Код:
  public static void generateParametrs(String path) throws FileNotFoundException {
        Random random = new Random();
        BigInteger p, betta, t;
        final BigInteger two = BigInteger.valueOf(2);
        BigInteger q = BigInteger.probablePrime(160, random);
        BigInteger k = BigInteger.probablePrime(256, random);
        do {
            k = k.add(BigInteger.ONE);
            p = (q.multiply(k)).add(BigInteger.ONE);
        } while (p.isProbablePrime(15));

        betta = BigInteger.probablePrime(64, random);
        t = new BigInteger(32, random);
        while (t.equals(two.modPow(q, p))) {
            t = new BigInteger(32, random);
        }


        File f = new File(path);
        f.delete();
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path, true)));
        try {

            out.write("p=" + p);
            out.newLine();
            out.write("q=" + q);

            out.newLine();
            out.write("betta=" + betta);

            out.close();
        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

    }
Но у меня появилась следующая проблема:
Ответ на задачу состоит из 2-х программ - Alcie и Bob. Алиса генерирует открытые параметры системы и цифровую подпись и записывает их в файл(в разные файлы). Но есть небольшой баг: иногда, даже при верных параметрах цифровые подписис не совпадают. И по-этому, я сделал проверку на стороне Alice: генерировать параметры до тех пор, пока цифровые подписи не будут совпадать.
Код:
        while (true) {
            /////////////////////////////////////////////////////
            m = m_receive;
            generateParametrs(param_path);

            try {
                inF = new BufferedReader(new InputStreamReader(new FileInputStream(param_path)));
                while (inF.ready()) {
                    String s = inF.readLine();
                    if (s.contains("p")) p = new BigInteger(s.substring(2));
                    if (s.contains("q")) q = new BigInteger(s.substring(2));
                    if (s.contains("betta")) betta = new BigInteger(s.substring(6));
                    //System.out.println(s);
                }
            } catch (IOException ez) {
            }


            


            while (true) {


                a = BigInteger.valueOf(Math.abs(random.nextInt()));
                if (a.compareTo(q.subtract(BigInteger.ONE)) == 1 || a.compareTo(BigInteger.ONE) == -1) {
                } else break;
            }

            //Алиса вычисляет v - открытый ключ
            BigInteger v = betta.modPow(a.negate(), p);
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(param_path, true)));
            try {
                out.newLine();
                out.write("v=" + v);
                out.close();
            } catch (IOException ex) {
                ex.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }

            while (true) {

                r = BigInteger.valueOf(Math.abs(random.nextInt()));
                if (r.compareTo(q.subtract(BigInteger.ONE)) == 1 || r.compareTo(BigInteger.ONE) == -1) {
                } else break;

            }


            x = betta.modPow(r, p); // Вычисляется х и отсылается Бобу


            m = m + x;
            E = m.hashCode();
            e = BigInteger.valueOf(E);
            y = ((a.multiply(e)).add(r)).mod(q);
            BigInteger z = betta.modPow(y, p).multiply((v.modPow(e, p))).mod(p);
            if (z.equals(x)) break; // ПРОВЕРКА, что бы подписис совпадали(z - подпись, которая должна вычислялться у Боба)

           

        }
Как можно увидеть, если подписи не совпадают, то начинается все сначала, где вызывается ф-ция generateParametrs(param_path), где она генерирует параметры и сначала удаляет текстовый файл по пути param_path, а потом создает вновь этот файл и пишет туда параметры.
Но почему-то когда программа вызывает второй раз ф-цию генерации параметров, файл с открытыми параметрами не удалаяется, а новые данные пишутся поверх сарых. В чем может быть проблема, почему программа не хочет удалять старый файл?
Спасибо

P.S. еще вопрос: я пользуюсь стандартной функцией hashCode(), что бы получить хэш сообщения(внезапно, да? ) Препод же требует от меня саму хэш-функцию. В связи с этим вопрос, по какому алгоритму считается hashCode()?
artem611 вне форума Ответить с цитированием
Старый 30.04.2012, 11:29   #2
artem611
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 40
По умолчанию

Все, нашел решение проблемы: я забыл закрыть поток чтения inF. После его закрытия все работает нормально.
Тему можно закрыть
artem611 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не удаляется запись - почему? cliv БД в Delphi 2 25.07.2011 23:21
удаляется последняя запись ilushka2306 PHP 15 06.06.2011 06:55
Не удаляется файл, не закрыты все потоки для этого файла oirren Общие вопросы по Java, Java SE, Kotlin 1 20.12.2009 21:12
Не удаляется файл. Манжосов Денис :) Общие вопросы Delphi 2 21.08.2008 16:41
Не удаляется папка. Kashp Операционные системы общие вопросы 9 31.01.2008 10:49