解密字符串时出现异常

时间:2013-08-09 22:27:38

标签: java encryption padding

我一直在尝试使用Cipher类加密一段时间,但我仍然遇到问题。我遇到填充和字节数组大小的问题。我收到这个例外 “使用填充密码解密时,输入长度必须是8的倍数” 这是我写的代码:

public CipherClass() {
    try {
        cipher = Cipher.getInstance(CIPHER_ALGO);
        secKey = SecretKeyFactory.getInstance(CIPHER_ALGO).generateSecret(new DESedeKeySpec(new BigInteger(KEY, 16).toByteArray()));
    }
    catch(GeneralSecurityException e){
        e.printStackTrace();
    }
}

private String encrypt(String text){
    try {
        cipher.init(Cipher.ENCRYPT_MODE, secKey);
        Base64 encoder = new Base64();
        return new String(encoder.encode(cipher.doFinal(text.getBytes())));
    }
    catch(GeneralSecurityException e) {
        e.printStackTrace();
    }
    return "";
}

private String decrypt(String text) {
    try {
        cipher.init(Cipher.DECRYPT_MODE, secKey);
        Base64 decoder = new Base64();
        return new String(decoder.decode(cipher.doFinal(text.getBytes())));
    }

    catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

我也尝试使用Hex而不是Base64,我收到了这个异常: “鉴于最后一块没有正确填充”

请帮我解决,找错误。 提前致谢。

1 个答案:

答案 0 :(得分:0)

您需要在解密之前运行base64解码器。这些操作需要相互映射:encrypted = encrypt(plaintext)encoded = encode(encrypted); encrypted = decode(encoded)plaintext = decrypt(encrypted)