Считывание электронной цифровой подписи

Модератор: Absurd

Ответить
v0ffka87
Сообщения: 1
Зарегистрирован: 26 май 2009, 21:19

Всем привет! пишу диплом, одна из составных - проверка электронно-цифровой подписи. Когда создаю подпись и сразу ее проверяю, все нормально работает

Код: Выделить всё

String sData = "This is some text";
byte[] data = sData.getBytes();
        
            KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
            kpg.initialize(1024);
            KeyPair keyPair = kpg.generateKeyPair();
            PrivateKey privateKey = keyPair.getPrivate();
            PublicKey publicKey = keyPair.getPublic();
                                            
            Signature dsa = Signature.getInstance("DSA");
            
            dsa.initSign(privateKey);
            dsa.update(data);
            byte[] sig = dsa.sign();
                        
            dsa.initVerify(publicKey);
            
            dsa.update(data);
            boolean verifies = dsa.verify(sig);
            System.out.println("signature verifies: " + verifies);    
Тут все норм работает, выдает 'true'. Но при попытке записи ЭЦП(электронной подписи) в файл и считывание ее от туда, выдает 'false'.

Код: Выделить всё

KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");
        kpg.initialize(1024);
        KeyPair keyPair = kpg.generateKeyPair();
        PrivateKey privateKey = keyPair.getPrivate();
        PublicKey publicKey = keyPair.getPublic();
                                        
        Signature dsa = Signature.getInstance("DSA");
        dsa.initSign(privateKey);
        
        FileInputStream fRead = new FileInputStream(new File("D:\\test\\plainText.txt"));
        byte[] buffer = new byte[8192];
        int lenght;
        while((lenght = fRead.read(buffer)) != -1) {
            dsa.update(buffer, 0, lenght);
        }
        byte[] sig = dsa.sign();
        fRead.close();
        
        
        File file1 = new File("D:\\test(OnlySignature).txt");
        FileOutputStream fOut = new FileOutputStream(file1);
        fOut.write(sig);
        fOut.close();
        
        FileInputStream fIn = new FileInputStream(file1);
        byte[] data = new byte[fIn.available()];
        fIn.read(data);
        fIn.close();
        
        dsa.initVerify(publicKey);
        dsa.update(data);
        boolean verifies = dsa.verify(sig);
        System.out.println("signature verifies: " + verifies); 
В чем проблема, ума не приложу.... Подскажите пожалуйста кто знает

З.Ы.

Код: Выделить всё

FileInputStream fIn = new FileInputStream(file1);
        int n;
        while((n = fIn.read()) != -1) {
         dsa.update((byte)n);
        }
        fIn.close();
неработает
Ответить