2015-07-16 5 views
0

Я не могу найти хорошую (полную) документацию по обмену подписанным сообщением открытого и закрытого ключей на Java.Как отправить и получить общедоступное/закрытое сообщение DSA в Java

Мне еще нужно найти краткий документ о минимальных шагах, необходимых для создания открытого ключа и частного ключа с использованием DSA, подписать байт [] и проверить его.

documentation от Oracle слишком разбит и требует использования нескольких JVM.

ответ

1

Я успешно подписал массив байтов с закрытым ключом и проверил его с помощью открытого ключа.

Пример.

byte[] data = "hello.".getBytes(); 

    /* Test generating and verifying a DSA signature */ 
    try { 
     /* generate a key pair */ 
     KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA"); 
     keyGen.initialize(1024, new SecureRandom()); 
     KeyPair pair = keyGen.generateKeyPair(); 

     /* create a Signature object to use 
     * for signing and verifying */ 
     Signature dsa = Signature.getInstance("SHA/DSA"); 

     /* initialize the Signature object for signing */ 
     PrivateKey priv = pair.getPrivate(); 
     dsa.initSign(priv); 

     /* Update and sign the data */ 
     dsa.update(data); 

     /* Now that all the data to be signed 
     * has been read in, sign it */ 
     byte[] sig = dsa.sign(); 

     /* Verify the signature */ 

     /* Initialize the Signature object for verification */ 
     PublicKey pub = pair.getPublic(); 
     dsa.initVerify(pub); 

     /* Update and verify the data */ 
     dsa.update(data); 

     boolean verifies = dsa.verify(sig); 
     Assert.assertTrue(verifies); 
    } catch (Exception e) { 
     System.err.println("Caught exception " + e.toString()); 
    } 

В этой версии я сериализовать открытый ключ в массив байтов, а затем создать ОткрытыйКлюч из этого массива байтов.

byte[] data = "hello.".getBytes(); 

    /* Test generating and verifying a DSA signature */ 
    try { 
     /* generate a key pair */ 
     KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA"); 
     keyGen.initialize(1024, new SecureRandom()); 
     KeyPair pair = keyGen.generateKeyPair(); 

     /* create a Signature object to use 
     * for signing and verifying */ 
     Signature dsa = Signature.getInstance("SHA/DSA"); 

     /* initialize the Signature object for signing */ 
     PrivateKey priv = pair.getPrivate(); 
     dsa.initSign(priv); 

     /* Update and sign the data */ 
     dsa.update(data); 

     /* Now that all the data to be signed 
     * has been read in, sign it */ 
     byte[] sig = dsa.sign(); 

     /* Verify the signature */ 

     /* Initialize the Signature object for verification */ 
     PublicKey pub = pair.getPublic(); 
     /* Encode the public key into a byte array */ 
     byte[] encoded = pub.getEncoded(); 
     /* Get the public key from the encoded byte array */ 
     PublicKey fromEncoded = KeyFactory.getInstance("DSA", "SUN").generatePublic(new X509EncodedKeySpec(encoded)); 
     dsa.initVerify(fromEncoded); 

     /* Update and verify the data */ 
     dsa.update(data); 

     boolean verifies = dsa.verify(sig); 
     Assert.assertTrue(verifies); 
    } catch (Exception e) { 
     System.err.println("Caught exception " + e.toString()); 
    }