【发布时间】:2019-05-03 06:25:42
【问题描述】:
我在解密字符串时遇到了一些问题。我收到的错误是:
"javax.crypto.IllegalBlockSizeException: 使用填充密码解密时输入长度必须是 16 的倍数"
这是我想要达到的目标。
-用户在创建帐户时设置密码。在这种情况下,泰勒。
-这个密码管理器类将把这个字符串翻译成乱码(这是它产生的:“I^ÇÔµoü|& ÄŠóÁ”)。
-然后我将这些乱码存储在一个文本文件中。
-从那里输入密码 Taylor 后,这个存储的乱码被解密,然后与输入的字符串进行比较。如果正确,用户可以访问该应用程序。
感谢您的帮助。
作为旁注,我不确定我是否已正确初始化密钥:/ 这也是我第一次玩加密。我不确定它是真的很酷还是真的很令人沮丧。
public static void Decrypt(String encryptedText) {
try
{
//we are using the same key to decrypt the string as we used to encrypt it.
String key = "AbCd1234aBcD4321";
// Here we are taking the 128 bit key we just created and expanding it
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, aesKey);
//decrypt the text
byte[] encrypted = cipher.doFinal(encryptedText.getBytes());
String decrypted = new String(cipher.doFinal(encrypted));
System.out.println(decrypted);
}
catch(Exception e)
{
e.printStackTrace();
}
【问题讨论】:
-
嗨,尝试解密时可能会创建一个新的密码流。这是example。
-
你为什么要double解密输入? --- 顺便说一句:加密数据是 二进制,而不是文本,除非以某种方式编码为文本(十六进制、Base64、...)。
-
@James Taylor 你能分享你的加密方法吗?我认为问题在于您尝试从 encryptedText 字符串参数中获取字节的方式。这实际上取决于如何从您从密码获得的字节数组生成输出字符串。
标签: java encryption