我在用Java解密字符串时遇到问题

时间:2019-05-02 21:37:49

标签: java encryption

我在解密字符串时遇到一些麻烦。我收到的错误是:

“ 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();
    }

1 个答案:

答案 0 :(得分:0)

您的问题是这一行:

byte[] encrypted = cipher.doFinal(encryptedText.getBytes()); 

您不能将任意二进制信息转换为字符串,并且期望它能正确转换回字符串。那样根本行不通。

UTF-8是与MP3文件相同的结构化二进制数据。并非每个字节序列都能产生有效的MP3文件,并非每个字节序列都能产生有效的UTF-8字符串。

根据定义,加密数据是二进制数据。您应该这样存储它。