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

时间:2017-11-27 15:02:16

标签: encryption cryptography java

我有一些加密的帐户信息并写入这样的文件:

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[] encrypted

只要lines.getByte()与加密过程中使用的相同,就可以正常工作,但是当我尝试使用FileReader和BufferedReader从文件中读取加密文本并使用它将其更改为一个字节时javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher 它会抛出异常

{{1}}

1 个答案:

答案 0 :(得分:1)

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

如果我没有评论一些糟糕的协议选择,我也会失职。

  1. 硬编码密钥 - 您的加密密钥永远不应在您的应用程序中进行硬编码。如果您需要更改加密密钥,则无法执行此操作。如果您的应用程序已分发给最终用户,则使用 strings 等应用程序可以轻松恢复密钥。
  2. 您使用ECB作为操作模式。 ECB有几种可以攻击的方式,例如阻塞混乱,它可以允许攻击者在没有加密密钥的情况下解密数据。
  3. 加密很难自行解决。考虑以不同的方式解决您的问题。

相关问题