我正在编写一小段代码,用于读取存储在.pem文件中的公钥和私钥.我使用以下命令来生成密钥.
下面的命令生成一对密钥.
$openssl genrsa -out mykey.pem 2048
Run Code Online (Sandbox Code Playgroud)
此命令用于生成私钥
$openssl pkcs8 -topk8 -inform PEM -outform PEM -in mykey.pem \
-out private_key.pem -nocrypt
Run Code Online (Sandbox Code Playgroud)
和此命令获取公钥.
$ openssl rsa -in mykey.pem -pubout -outform DER -out public_key.der
Run Code Online (Sandbox Code Playgroud)
我写了两个分别读取私钥和公钥的方法.
public PrivateKey getPemPrivateKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();
String temp = new String(keyBytes);
String privKeyPEM = temp.replace("-----BEGIN PRIVATE KEY-----\n", "");
privKeyPEM = privKeyPEM.replace("-----END …Run Code Online (Sandbox Code Playgroud) 文档说不应该使用available()方法来确定a的大小InputStream.如何InputStream将一个字节数组的整个内容读入?
InputStream in; //assuming already present
byte[] data = new byte[in.available()];
in.read(data);//now data is filled with the whole content of the InputStream
Run Code Online (Sandbox Code Playgroud)
我可以多次读入固定大小的缓冲区,但是,我必须将读取的数据组合成单个字节数组,这对我来说是一个问题.