gpt4 book ai didi

encryption - 如何从文件中读取加密文本并解密?

转载 作者:行者123 更新时间:2023-12-02 02:28:15 26 4
gpt4 key购买 nike

我有一些帐户信息正在加密并写入如下文件:

//imports here
public class Main

public static void main(String[] args) {


try {
String text = "this text will be encrypted";

String key = "Bar12345Bar12345";

//Create key and cipher
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");

//encrypt text
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(text.getBytes());
write(new String(encrypted));

} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
e.printStackTrace();
}

}

public static void write(String message) {
BufferedWriter bw = null;
FileWriter fw = null;

try {

String data = message;

File file = new File(FILENAME);
if (!file.exists()) {
file.createNewFile();
}


fw = new FileWriter(file.getAbsoluteFile(), true);
bw = new BufferedWriter(fw);

bw.write(data);

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (bw != null)
bw.close();

if (fw != null)
fw.close();

} catch (IOException ex) {

ex.printStackTrace();

}
}
}

}

因此文件的内容是一个字符串,中间没有任何中断。如果我想解密该字符串,我会这样做:

String key = "Bar12345Bar12345";
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
byte[] encrypted = text.getBytes();
cipher.init(Cipher.DECRYPT_MODE, aesKey);
String decrypted = new String(cipher.doFinal(encrypted));
System.err.println(decrypted);

只要byte[]加密与加密过程中使用的相同,就可以正常工作,但是当我尝试使用 FileReader 和 BufferedReader 从文件中读取加密文本时使用lines.getByte()将其更改为字节它会抛出异常

javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher

最佳答案

在尝试进行任何解密之前,将加密过程中的密文与lines.getByte() 中的密文进行比较。它们很可能是不同的。在解密之前尝试先将整个文件读入 byte[] 中。对称密码需要在相同大小的 block 上完成工作,在本例中为 16 字节。

如果我不对一些糟糕的协议(protocol)选择发表评论,那也是我的失职。

  1. 硬编码 key - 您的加密 key 不应在应用程序中进行硬编码。如果您需要更改加密 key ,您将无法这样做。如果您的应用程序分发给最终用户,他们可以使用字符串等应用程序轻松恢复 key 。
  2. 您正在使用ECB作为您的操作方式。 ECB 有多种攻击方式,例如 block 洗牌,攻击者可以在没有加密 key 的情况下解密数据。

仅靠您自己很难实现加密。考虑以不同的方式解决您的问题。

关于encryption - 如何从文件中读取加密文本并解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47516485/

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