用keytool 和jarsigner 给jar做了数字签名,并生成了证书和密钥库。现在想用java程序验证一下签名?我现在是这么做的: 1 从证书里读取公钥 进行 signature的initverify
2 从证书里读取签名部分 用的证书的getSignature()这个方法
3 读取已经签名的jar,进行signature的update
4 然后调用signuature 的 verify方法进行验证 现在验证的结果总是false?不知道是什么原因了,各位在处理这个问题的时候都是怎么做的?
2 从证书里读取签名部分 用的证书的getSignature()这个方法
3 读取已经签名的jar,进行signature的update
4 然后调用signuature 的 verify方法进行验证 现在验证的结果总是false?不知道是什么原因了,各位在处理这个问题的时候都是怎么做的?
解决方案 »
- Java JPanel问题
- 关于多线程和网络java.net有好书吗???
- java中设置word文档的页边距
- 关于解析XML的问题,急,在线等.....
- abstract Method可以直接调用?
- 我现在要生成一个29位的数字
- 如何判断读取文件已经结束??
- 急!一个jpcap抓包获取http包中url的小程序出现问题,求大神帮忙
- 请教HTTP协议三次握手的命令字,谢谢!!!
- Java在向oracle数据库存储数据时报ORA-01000: maximum open cursors exceeded
- jmf怎么用啊?怎么配置eclipse啊?请前辈们指点。。。
- 有什么办法让程序绑定特定的电脑哦?
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;public class NewCert { public static void main(String[] args) {
try {
// 公钥
CertificateFactory certificatefactory = null;
certificatefactory = CertificateFactory.getInstance("X.509");
FileInputStream fin = new FileInputStream("D://test.cer");
X509Certificate certificate = (X509Certificate) certificatefactory
.generateCertificate(fin);
fin.close(); Signature sign = Signature.getInstance("SHA1withDSA");
PublicKey pub = certificate.getPublicKey();
sign.initVerify(pub); // 签名
byte[] bytss = certificate.getSignature(); // 已签名的文件 FileInputStream fis = null;
try {
fis = new FileInputStream("D://test.jar");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
BufferedInputStream bufin = new BufferedInputStream(fis); byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) {
len = bufin.read(buffer);
sign.update(buffer, 0, len);
} bufin.close(); boolean verifies = sign.verify(bytss);
System.out.println("verified " + verifies);
if (verifies) {
System.out.println("Verify is done!");
} else {
System.out.println("verify is not successful");
}
} catch (IOException e1) {
e1.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (SignatureException e) {
e.printStackTrace();
} }
}
http://stackoverflow.com/questions/5587656/verifying-jar-signature
http://stackoverflow.com/questions/4970016/how-to-verify-signature-on-self-signed-jar