android - 从文件中读取存储的 SecretKey
问题描述
使用以下代码,我可以将 SecretKey 存储到文件中:
public static SecretKey generateKey() throws NoSuchAlgorithmException {
// Generate a 256-bit key
final int outputKeyLength = 256;
SecureRandom secureRandom = new SecureRandom();
// Do *not* seed secureRandom! Automatically seeded from system entropy.
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(outputKeyLength, secureRandom);
yourKey = keyGenerator.generateKey();
return yourKey;
}
yourKey = generateKey();
File file = new File(Environment.getExternalStorageDirectory() + File.separator + "encrypt" + File.separator, "config.xml");
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
byte[] filesBytes = yourKey.getEncoded();
bos.write(filesBytes);
bos.flush();
bos.close();
现在我如何读取这个文件并将 bytes[] 传递给 SecretKey 变量?例如:
File file = new File(Environment.getExternalStorageDirectory() + File.separator + "convert" + File.separator, "config.xml");
BufferedInputStream buf = new BufferedInputStream(
new FileInputStream(file));
int length = (int) file.length();
byte[] audio_data = new byte[length];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((bytesRead = buf.read(audio_data)) != -1) {
output.write(audio_data, 0, bytesRead);
}
byte[] inarry = output.toByteArray();
yourKey=inarry;
问题是yourKey=inarry;
将字节传递给yourKey
变量,我该如何解决?
解决方案
即使我自己从不这样做,但如果您想写入SecretKey
文件并稍后读取它,您可以使用ObjectOutputStream
and ObjectInputStream
。
SecretKey
是Serializable
,所以你可以使用这两个功能。
像这样写:
FileOutputStream fout = new FileOutputStream("G:\\address.ser");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(yourKey);
oos.close();
fout.close();
读起来像:
FileInputStream fin = new FileInputStream("G:\\address.ser");
ObjectInputStream ois = new ObjectInputStream(fin);
SecretKey yourKey = (SecretKey) ois.readObject();
ois.close();
fin.close();
但正如我所说,你通常不应该这样做。如果您只想存储密钥,则需要使用KeyStore
. 如果需要保存发送,则需要加密保存。密钥是密码算法中最重要的部分,因此您永远不应该将它这样保存在文件中。
推荐阅读
- amazon-web-services - 计数=真。适用于 terraform 11 但不适用于 terrafom 12
- angular - 如何从对象 url 以角度 ngFor 显示图像?
- regex - 匹配模式多行 Integromat
- reactjs - 使用 react-loading-overlay 的问题
- java - 如何使用 AdminEvent 获取在 keycloak 中删除的用户的详细信息?
- angular - 为什么 p-multiSelect 值未显示在下拉文本框或控件中?
- javascript - 有没有办法使用 Chart.js 将图表作为图像直接存储到服务器?
- python-3.x - 如何根据内容删除不相关的数据
- jquery - iframe位置内的JQuery3对话框
- javascript - 从 DOM 中完全移除弹出窗口