android - 使用 Android KeyStore 进行 AES 解密
问题描述
我正在尝试在 Android KeyStore 中使用 AES 加密 - 密钥生成和加密工作正常,但加密没有。我使用以下代码来生成密钥:
KeyGenerator keyGenerator = KeyGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
keyGenerator.init(
new KeyGenParameterSpec.Builder(keyAlias, keyUsage)
.setKeySize(256)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.setIsStrongBoxBacked(false)
.build());
keyTeeAES = keyGenerator.generateKey();
以及以下用于加密和解密的代码
Cipher cipher;
cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, keyTeeAES);
cipherCreatedAES = cipher.doFinal(data);
IvParameterSpec ivParameterSpec = new IvParameterSpec(cipher.getIV());
cipher.init(Cipher.DECRYPT_MODE, keyTeeAES, ivParameterSpec);
cipher.doFinal(cipherCreatedAES);
我在解密时遇到以下错误,显然我得到了 NullPointerException
IvParameterSpec ivParameterSpec = new IvParameterSpec(cipher.getIV());
W/System.err: java.lang.NullPointerException: Attempt to get length of null array
at javax.crypto.spec.IvParameterSpec.<init>(IvParameterSpec.java:53)
at com.example.securecomputingtest.CryptographyTee.useKeysAES(CryptographyTee.java:347)
at com.example.securecomputingtest.MainActivity$2.onClick(MainActivity.java:150)
at android.view.View.performClick(View.java:7259)
at android.view.View.performClickInternal(View.java:7236)
at android.view.View.access$3600(View.java:801)
at android.view.View$PerformClick.run(View.java:27892)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
我也尝试过为什么我的 AES 加密会引发 InvalidKeyException?- 但也没有工作
解决方案
我现在通过禁用 KeyGenParameterSpec 中的随机加密来解决它
.setRandomizedEncryptionRequired(false)
并设置一个固定的 IV,它现在可以工作了,尽管这个解决方案可能不是最优的。
推荐阅读
- ios - 分段错误:11 - Xcode 10
- reactjs - Chartjs-2(React),不出现线条
- python-3.x - 尝试生成一个随机图,然后生成另一个,直到它与第一个同构
- java - 与 Bean 创建有关的 Spring Server 问题
- javascript - 有没有办法检测一个作用域插槽是否被传递给组件?
- html - HTML5 Canvas 设置设备像素比会影响性能
- r - 数据框的月日期过滤器?
- r - 在 R 中打开 .hdr .stx .prj 和 .flt
- javascript - 以编程方式单击 Google 幻灯片中的某个位置
- x11 - 无法设置 GtkX11Display xevent 信号