0

我一直在尝试使用 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,我收到了这个异常:“鉴于最终块没有正确填充”

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

4

1 回答 1

0

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

于 2013-08-10T12:45:24.677 回答