首页 > 解决方案 > 从文件中读取存储的 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变量,我该如何解决?

标签: android

解决方案


即使我自己从不这样做,但如果您想写入SecretKey文件并稍后读取它,您可以使用ObjectOutputStreamand ObjectInputStream

SecretKeySerializable,所以你可以使用这两个功能。

像这样写:

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. 如果需要保存发送,则需要加密保存。密钥是密码算法中最重要的部分,因此您永远不应该将它这样保存在文件中。


推荐阅读