java-8 - 在代码中硬编码公钥而不是从 public.der 中挑选它
问题描述
我创建public.der
并private.der
使用了 openssl。我需要将生成的公钥硬编码到代码中,而不是从public.der
文件中读取该密钥。当我将文件中的密钥读入 byte[] 并打印该字节数组时,我会得到类似"[B@74a14482"
. 我可以通过从文件中读取密钥来运行程序,但是执行需要时间,所以我想将密钥直接硬编码到程序中。我有以下功能
public PublicKey readPublicKey(String filename) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, URISyntaxException {
String str = "[B@74a14482";
byte[] b = str.getBytes();
X509EncodedKeySpec publicSpec = new X509EncodedKeySpec(b);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(publicSpec);
}
但它给了我错误
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: Detect premature EOF
我提到了这个 并运行,但我得到了同样的错误。
打印字节数组的代码:
public byte[] readFileBytes(String filename) throws IOException, URISyntaxException {
return ByteStreams.toByteArray(ResourceLoader.loadFile(filename));
}
public PublicKey readPublicKey(String filename) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, URISyntaxException {
System.out.println(readFileBytes(filename));
String str = "[B@74a14482";
byte[] keyBytes;
keyBytes = (new BASE64Decoder()).decodeBuffer(str);
X509EncodedKeySpec publicSpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(publicSpec);
}
你能帮我解决这个问题吗?我要去哪里错了。
解决方案
正如@michalk 所指出的,您打印的是toString()
应用于字节数组的方法的结果。此方法不打印数组的内容。
另一个问题是并非所有字节都可以转换为可打印字符。
我建议使用Base64重新设置密钥,这将为您提供密钥的可打印版本。然后你可以在使用它之前解码这个字符串。
打印文件内容
byte [] keyBytes = readFileBytes(filename);
String keyString = Base64.getEncoder().encodeToString(key);
System.out.println(keyString);
从字符串中解码密钥
byte[] keyBytes = Base64.getDecoder().decode(keyString);
(而不是keyBytes = (new BASE64Decoder()).decodeBuffer(str);
)
推荐阅读
- python - 如何将文件中的 str 作为整数获取?
- reactjs - 是的,在 React 中的两个条件
- image - Loading images in unlabelled subfolders using Keras's ImageDataGenerator
- javascript - URL 正在重定向到“www.example.com/undefined”
- c# - OPENGL (GLFW),glDrawElements 发出“Acces.ViolationException”
- docker - WslRegisterDistribution 失败并出现错误:0xffffffff
- mysql - MySQL查询以查找完整的交叉点
- instagram-api - 如何在“Instagram Basic Display API”中获取没有 Instagram 测试员帐户的访问令牌
- python - Python 和 csv 文件
- webrtc - 如何在 WebRTC / SDP 连接中获取远程 IP?