Problemas com Encriptação assinatura digital usando tutorial GUJ

Estou fazendo o exemplo do tutorial do guj “Trabalhando com encriptação e assinatura digital” no link http://www.guj.com.br/java.tutorial.artigo.141.1.guj

e estou com o seguinte erro:

java.security.InvalidKeyException: No installed provider supports this key: sun.security.rsa.RSAPrivateCrtKeyImpl
        at java.security.Signature$Delegate.chooseProvider(Signature.java:1059)
        at java.security.Signature$Delegate.engineInitSign(Signature.java:1100)
        at java.security.Signature.initSign(Signature.java:485)

A unica coisa que tive que colocar no codigo foi tipo de assinatura

Signature sig = Signature.getInstance("DSA");

Já tentei outros tipos: RSA, MD5 e nao funcionou.

Alguem já teve este erro?

http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#Signature

PS: Os algoritmos de criptografia presentes da distribuição da JDK variam de versão para versão. As JDK 1.5 e JDK 1.6 acho que possuem os mesmo algoritmos.

Cara eu fiz o mesmo exemplo e deu o mesmo erro ai eu fiz assim e funcionou:

Abraços.

Pessoal eu estou com o seguinte erro

java.lang.ClassCastException: sun.security.x509.X509CertImpl cannot be cast to java.security.Certificate
at certificadodigital.Main.getPublicKeyFromFile(Main.java:41)
at certificadodigital.Main.main(Main.java:102)

Alguém pode me ajudar?