La vérification d'une signature avec une clé publique

J'ai un service externe qui m'appellent en arrière après l'évènement défini, et signer sa demande avec sa clé privée.

Je l'ai stocké la clé publique qui ressemblent :

-----BEGIN PUBLIC KEY-----
........................................
-----END PUBLIC KEY-----

Donc, mon travail est de vérifier si la demande de contenu n'a pas été alterned par la vérification de la signature.

Voici mon algorithme :

//1 - reading public key :
Scanner scanner = new Scanner( new File( keyPath ) );


//           encodedPublicKey.toString( );
StringBuilder sb = new StringBuilder( );
while ( scanner.hasNextLine( ) )
{
    sb.append( scanner.nextLine( ) );
    sb.append( '\n' );
}

byte[] encodedPublicKey = sb.toString( ).getBytes( "utf-8" );

//2 - loading public key in a relevant object :
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec( publicKeyBytes );

KeyFactory keyFactory = KeyFactory.getInstance( "DSA" );

PublicKey publicKey = keyFactory.generatePublic( publicKeySpec );

//3 - verifying content with signature and content :
Signature sig = Signature.getInstance( "SHA1withDSA" );
sig.initVerify( publicKey );
sig.update( message.getBytes( ) );
ret = sig.verify( sign.getBytes( ) );

Mais pour l'instant mon algorithme est arrêtée à "PublicKey publicKey = keyFactory.generatePublic( publicKeySpec )" par ce message :

java.security.spec.InvalidKeySpecException: Inappropriate key specification: invalid key format

Alors, comment puis-je charger ma clé d'une manière qui est accepté par les api java ?

Savez-vous quel algorithme de Chiffrement à l'autre partie utilisé pour créer sa clé privée? Le message d'erreur semble être de dire que vous utilisez le mauvais algo de chiffrement, ou l'algo n'est pas une partie de l'API. Si c'est le cas, vous pouvez avoir besoin de trouver une mise en œuvre de SHA1withDSA. Mais je pense que cela devrait déjà être là.
La Documentation dit RSA, mais il n'est pas vraiment dignes de confiance autant que je sache, donc j'ai essayer les deux RSA et DSA avec la même exception résultat.
Bonjour, tout progrès en la matière? J'ai essayé de compiler votre exemple ci-dessus, mais il l'habitude de compiler sur le commentaire de l'article 2. Impossible de trouver var "publicKeyBytes"

OriginalL'auteur Manuel Leduc | 2012-07-27