Проверка подписи открытым ключом

У меня есть внешняя служба, которая перезванивает мне после определенного события и подписывает его запрос своим закрытым ключом.

Я сохранил открытый ключ, который выглядит как:

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

Итак, моя работа заключается в том, чтобы проверить, не было ли изменено содержимое запроса путем проверки подписи.

Вот мой алгоритм:

// 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( ) );

Но пока мой алгоритм остановлен на «PublicKey publicKey = keyFactory.generatePublic (publicKeySpec )» по этому сообщению:

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

Итак, как я могу загрузить свой ключ так, чтобы он был принят java API?

9
задан Manuel Leduc 27 July 2012 в 15:57
поделиться