当前位置: 技术问答>java相关
java的签名
来源: 互联网 发布时间:2015-11-04
本文导语: 在使用java 的程序中验证签名时,需要读入公钥的文件,生成PUBLICKEY的对象. 现在我使用的是别人提供的一个文本文件,在读入字节流,生成PublicKey的时候总是抱错,是因为无法将字节流转造型为PublicKey. 下面是我写的那段代...
在使用java 的程序中验证签名时,需要读入公钥的文件,生成PUBLICKEY的对象.
现在我使用的是别人提供的一个文本文件,在读入字节流,生成PublicKey的时候总是抱错,是因为无法将字节流转造型为PublicKey.
下面是我写的那段代码:
1.String keyPath = "d:\ccbpk.txt";
2. java.io.FileInputStream fileCert = new java.io.FileInputStream(keyPath);
3. byte[] pub = new byte[fileCert.available()];
4. fileCert.read(pub);
5.java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(pub));
6.PublicKey pubkey=(PublicKey)in.readObject();
7.byte[] bobEncodedPubKey=pubkey.getEncoded();
8.X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(pubk);
9.System.out.println(bobPubKeySpec.getFormat());
10.KeyFactory keyFactory = KeyFactory.getInstance("RSA");
11.PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
程序总在第5行报错,因为给的文件是个文本文件,我不知道如何将字节流造型为PublicKey的对象,请高手指点迷津!
现在我使用的是别人提供的一个文本文件,在读入字节流,生成PublicKey的时候总是抱错,是因为无法将字节流转造型为PublicKey.
下面是我写的那段代码:
1.String keyPath = "d:\ccbpk.txt";
2. java.io.FileInputStream fileCert = new java.io.FileInputStream(keyPath);
3. byte[] pub = new byte[fileCert.available()];
4. fileCert.read(pub);
5.java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(pub));
6.PublicKey pubkey=(PublicKey)in.readObject();
7.byte[] bobEncodedPubKey=pubkey.getEncoded();
8.X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(pubk);
9.System.out.println(bobPubKeySpec.getFormat());
10.KeyFactory keyFactory = KeyFactory.getInstance("RSA");
11.PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
程序总在第5行报错,因为给的文件是个文本文件,我不知道如何将字节流造型为PublicKey的对象,请高手指点迷津!
|
你的文件到底是PublickKey还是一个证书?如果是PublicKey怎么会有文本格式呢?
如果是证书,则可能是ASC码或二进制的,都可以用以下代码将其读入(这里假设是X.509格式的证书):
CertificateFactory factory = CertificateFactory.getInstance("X.509");
java.security.cert.Certificate cert = factory.generateCertificate(new FileInputStream(path));
然后从证书中读取PublicKey
PublicKey pubKey = cert.getPublicKey();
如果是证书,则可能是ASC码或二进制的,都可以用以下代码将其读入(这里假设是X.509格式的证书):
CertificateFactory factory = CertificateFactory.getInstance("X.509");
java.security.cert.Certificate cert = factory.generateCertificate(new FileInputStream(path));
然后从证书中读取PublicKey
PublicKey pubKey = cert.getPublicKey();