以下是代码,证书的验证我已经通过了,可是对用户的验证总通不过,请高手
看看代码有无错误,测试时可以用自己的证书替换cs01.cer.随机数和签名结果也可以换。import java.security.*;
import java.security.spec.*;
import java.io.*;
import java.util.*;
import java.security.cert.*;
import java.math.BigInteger;
import java.util.Date;
import sun.misc.BASE64Decoder;
public class test {
  public static void main(String arg[])
  {
    test test=new test();
    test.run() ;
  }
  public void run()
  {
    try {     FileInputStream fin=null;
     DataInputStream din=null;
     java.security.cert.CertificateFactory CertFactory=java.security.cert.CertificateFactory.getInstance("X.509"); //初始化CertificateFactory     //用户证书信息
     fin=new FileInputStream("cs01.cer");
     din=new DataInputStream(fin);
     cert = (X509Certificate)CertFactory.generateCertificate(fin);
     Principal subDn=cert.getSubjectDN() ;      //return subject Principal whole name
     int ver=cert.getVersion() ;                //证书版本
     String type=cert.getType() ;               //Example x.509
     PublicKey pubKey=cert.getPublicKey() ;     //获得公钥
     String sigName=cert.getSigAlgName() ;      //获得签名算法
     fin.close();
     din.close() ;     //产生随机数,用户验证
     //本来是产生随机数验证,但现在指定一个验证。
     String randomString="0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF";
     byte[] randomBytes=randomString.getBytes() ;
     
     //signString 是用户对随机数签名的结果,在应用中,这个签名结果也是用String 形式传来的.
     String signString="26709B24377BA3A49EA7C7D0B266FA3C88F71304660C273E626BA90494D53C1D7A2960F6510995DA604B466F1E4A48C5913E9BE681FBBB7EB4171180DA0086E9AAFB64DD7C45CB762CDF3CD6223A392FA718DC453F49F27DBC19E887EC41905A690F098311A9D19926FA430212E88E7D7FCFF29DBB13B86A663EDBCD461A7F88";
     byte[] sigBytes=signString.getBytes() ;     Signature signetcheck=Signature.getInstance("SHA1withRSA");
     signetcheck.initVerify(pubKey); //用用户公钥验证(在用户证书信息处取得)
     signetcheck.update(randomBytes); //上传原信息
     if (signetcheck.verify(sigBytes))  //验证
     {
       System.out.println("签名正常");
     }else
       System.out.println("非正常签名");
    }
    catch (java.lang.Exception e)
        {e.printStackTrace();}
  }
}