错误:0606506D:数字信封程序:EVP_DecryptFinal_ex:最终块长度错误

时间:2019-06-20 15:07:22

标签: android encryption

我的问题是我需要保留信息流,这些信息流需要作为文件中加密的字节数组来保存。为此,我使用AES算法,因为我希望它是实时的并且需要速度。但是当我在移动设备上运行它时,出现了以下错误:

  

0606506D:数字信封例程:EVP_DecryptFinal_ex:错误的最终版本   块长

但是,如果我在NetBeans这样的另一种想法中尝试它,则不会给我任何错误。有人可以告诉我我的代码有什么问题,或者如何在Android上正确加密。

如果我使用注释的代码,我也会收到相同的错误

public class AESCrypt {

    private SecretKey secret;
    private final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    private final byte[] salt = new byte[]{82, -20, 113, 27, 6, 52, 124, -13};
    private final byte[] iv = {-66, 11, -122, -68, -54, -102, 123, -29, 107, 109, -1, 44, -125, 25, 5, -109};

    public AESCrypt(String pass) throws Exception {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
        sha256.update(pass.getBytes("UTF-8"));
        byte[] digest = sha256.digest();
        byte sec[] = new byte[32];
        System.arraycopy(digest, 0, sec, 0, sec.length);//primeros length bytes del sha-256
        secret = new SecretKeySpec(sec, "AES");

        /*SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
        KeySpec spec = new PBEKeySpec(pass.toCharArray(), salt, 65536, 128);
        SecretKey tmp = factory.generateSecret(spec);
        secret = new SecretKeySpec(tmp.getEncoded(), "AES");*/
    }

    public byte[] encrypt(byte[] arr) throws Exception {
        cipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(iv));
        return cipher.doFinal(arr);
    }

    public byte[] decrypt(byte[] arr) throws Exception {
        cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));
        return cipher.doFinal(arr);
    }

}

0 个答案:

没有答案