Certificate的verify方法是调用Signatrue的verify方法。我看了一下,在
"SUN"中只实现了SHA1WithDSA.但在"SunRsaSign"中实现了SHA1WithRSA,MD5WithRSA,MD2WithRSA.
所以用Certificate.verify(publickey,"SunRsaSign");试一下。
"SUN"中只实现了SHA1WithDSA.但在"SunRsaSign"中实现了SHA1WithRSA,MD5WithRSA,MD2WithRSA.
所以用Certificate.verify(publickey,"SunRsaSign");试一下。
另外,请教你是如何知道 在"SunRsaSign"中实现了SHA1WithRSA,MD5WithRSA,MD2WithRSA.? 又如何知道Certificate的verify方法是调用Signatrue的verify方法??
我安装了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,是什么原因?一定会给分的,谢谢!!!
其次,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
2. 1.3以上的JRE带了一个叫sunrsasign.jar的库,这才是SunRsaSign Provider,这个在1.2中是没有的。
3. 如果需要RSA,应找一个支持RSA的Provider,如BouncyCastle(http://www.bouncycastle.org)
jimjxr说的对,SunJCE不支持RSA,再次感谢热心人,希望我们能经常联系,多多切磋