Certificate的verify方法是调用Signatrue的verify方法。我看了一下,在
"SUN"中只实现了SHA1WithDSA.但在"SunRsaSign"中实现了SHA1WithRSA,MD5WithRSA,MD2WithRSA.
所以用Certificate.verify(publickey,"SunRsaSign");试一下。

解决方案 »

  1.   

    感谢这位兄弟。确定是这样,在JDK1.4下确实可以了,但这样用在JDK1.2下就会报错“没有PROVIDER SunRsaSign”, 如何在JDK1.2下使用这个函数来实现SHA1WithRSA,MD5WithRSA,MD2WithRSAR 的支持了?
    另外,请教你是如何知道      在"SunRsaSign"中实现了SHA1WithRSA,MD5WithRSA,MD2WithRSA.?  又如何知道Certificate的verify方法是调用Signatrue的verify方法??
      

  2.   

    horseliu,你好:
    我安装了JCE1.2,得到了SUN  JCE  provider,没有SunRsaSign provider,因此你的方法还是不能用,且JDK1.2中的Provider方法只有getInfo方法,无getter方法,得到JCE的信息为:
    SunJCE Provider (implements DES, Triple DES, Blowfish, PBE, Diffie-Hellman, HMAC-MD5, HMAC-SHA1), 并无MD5WithRSA,是什么原因?一定会给分的,谢谢!!!
      

  3.   

    首先,JCE1.2中一定有SunRsaSign provider.
    其次,getter,setter是JavaBean的规范用语,表示所有get和set方法。要得到支持的签名算法,用下面的程序因该可以,我试过的:
        String prefix="Signature.";
        Provider[] pros=Security.getProviders();
        int len=pros.length;
        for(int i=0;i<len;i++)
        {Provider p=pros[i];
         System.out.println("Provider "+p.getName()+" "+p.getVersion());
         System.out.println("   Surported Signatrue algoritms:");
         Set keys=p.keySet();
         Iterator ite=keys.iterator();
         while(ite.hasNext())
         {String name=(String)ite.next();
          if(name.startsWith(prefix))
            System.out.println("    "+name.substring(prefix.length()));       
         }//while
        }//for
      

  4.   

    1. Sun的JCE Provider叫SunJCE,这个Provider不支持RSA
    2. 1.3以上的JRE带了一个叫sunrsasign.jar的库,这才是SunRsaSign Provider,这个在1.2中是没有的。
    3. 如果需要RSA,应找一个支持RSA的Provider,如BouncyCastle(http://www.bouncycastle.org)
      

  5.   

    问题已经解决,下载安装了JSSE,PROVIDER设为SunJSSE就可以了。
    jimjxr说的对,SunJCE不支持RSA,再次感谢热心人,希望我们能经常联系,多多切磋