小编lov*_*ish的帖子

android cipher.doFinal在重新打开应用程序后尝试解密时出现BadPaddingException

问题可能很长,但我将尝试详细描述。

这是一个演示有像我一样的问题。

我有一个Android应用程序,我想添加一个功能,该功能允许用户加密和保存其密码到SharedPreferences中,并从SharedPreferences中读取和解密它们。仅在注册了指纹并且可以将指纹有效用作获取这些密码的验证方式时才可用。

何时存储:

  1. 用户输入密码
  2. 通过由AndroidKeyStore生成的SecretKey创建加密模式密码
public Cipher getEncryptCipher() {
    try {
        Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/"
                + KeyProperties.BLOCK_MODE_CBC + "/"
                + KeyProperties.ENCRYPTION_PADDING_PKCS7);
        mKeyStore.load(null);
        SecretKey key = (SecretKey) mKeyStore.getKey(KEY_NAME, null);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher;
    } catch (Exception e) {
        throw new RuntimeException("Failed to encrypt pin ", e);
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. FingerprintManager验证密码(密码A)并获得真实的加密密码(密码B)
//mCryptoObject is generated by cipher in step 2
mFingerprintManager.authenticate(mCryptoObject, mCancellationSignal, 0 /* flags */, FingerprintManager.AuthenticationCallback, null);


//in FingerprintManager.AuthenticationCallback
javax.crypto.Cipher cipher = result.getCryptoObject().getCipher();
Run Code Online (Sandbox Code Playgroud)
  1. 指纹管理器支持的密码(密码B)的加密密码
  2. 将加密的密码和密码iv存储在SharedPreferences中
//In my app, …
Run Code Online (Sandbox Code Playgroud)

encryption android badpaddingexception

5
推荐指数
1
解决办法
1587
查看次数

标签 统计

android ×1

badpaddingexception ×1

encryption ×1