gpt4 book ai didi

java - 如何将 IvParameterSpec 写入文件?

转载 作者:行者123 更新时间:2023-11-30 09:16:52 26 4
gpt4 key购买 nike

我使用以下代码将我的 SecretKey 写入了一个文件。同样,我必须将 ivParameterSpec 写入另一个文件。我该怎么做?

SecretKey key = KeyGenerator.getInstance("AES").generateKey();
ObjectOutputStream secretkeyOS = new ObjectOutputStream(new FileOutputStream("publicKeyFile"));
secretkeyOS.writeObject(key);
secretkeyOS.close();

AlgorithmParameterSpec paramSpec1 = new IvParameterSpec(iv);
session.setAttribute("secParam", paramSpec1);
ObjectOutputStream paramOS = new ObjectOutputStream(new FileOutputStream("paramFile"));
paramOS.writeObject(paramSpec1);
paramOS.close();

最佳答案

不要尝试存储 IvParameterSpec 对象。它不可序列化,因为它不打算存储。IV 是重要的部分。存储它并从 IV 创建一个新的 IvSpec。我更改了 here 中的示例代码用于 AES 加密以存储 IV 并使用加载的 IV 解密密文,以便您可以看到可能的工作流程。

请注意,这是一个最小的示例。在实际用例中,您也会存储和加载 key ,并且还应重新考虑异常处理:-D

public class Test {
public static void main(String[] args) throws Exception {
String message = "This string contains a secret message.";

// generate a key
KeyGenerator keygen = KeyGenerator.getInstance("AES");
keygen.init(128);
byte[] key = keygen.generateKey().getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");

byte[] iv = { 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8 };
IvParameterSpec ivspec = new IvParameterSpec(iv);

// initialize the cipher for encrypt mode
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec);

// encrypt the message
byte[] encrypted = cipher.doFinal(message.getBytes());
System.out.println("Ciphertext: " + hexEncode(encrypted) + "\n");

// Write IV
FileOutputStream fs = new FileOutputStream(new File("paramFile"));
BufferedOutputStream bos = new BufferedOutputStream(fs);
bos.write(iv);
bos.close();

// Read IV
byte[] fileData = new byte[16];
DataInputStream dis = null;

dis = new DataInputStream(new FileInputStream(new File("paramFile")));
dis.readFully(fileData);
if (dis != null) {
dis.close();
}

// reinitialize the cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(fileData));

// decrypt the message
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println("Plaintext: " + new String(decrypted) + "\n");
}

[...]
}

关于java - 如何将 IvParameterSpec 写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19245805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com