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 "";
}

また、Base64 の代わりに Hex を使用してみましたが、「指定された最終ブロックが適切に埋め込まれていません」という例外が発生します。

エラーを見つけるために、私を助けてください。前もって感謝します。

4

1 に答える 1

0

復号化する前に、base64 デコーダーを実行する必要があります。操作は相互にミラーリングする必要があります: encrypted = encrypt(plaintext), encoded = encode(encrypted); encrypted = decode(encoded)plaintext = decrypt(encrypted)

于 2013-08-10T12:45:24.677 に答える