mat*_*tec 1 android rsa android-keystore
我在一个块内有以下代码,try该代码应该生成 RSA 公钥/私钥对,使用公钥来加密消息并使用私钥再次解密:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
keyPairGenerator.initialize(new KeyGenParameterSpec.Builder(
"key1",
KeyProperties.PURPOSE_DECRYPT | KeyProperties.PURPOSE_ENCRYPT)
.setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
.build());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
byte[] src = "hello world".getBytes();
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
byte[] cipherData = cipher.doFinal(src);
Cipher cipher2 = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher2.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] msg = cipher2.doFinal(cipherData);
Run Code Online (Sandbox Code Playgroud)
最后一行抛出一个javax.crypto.IllegalBlockSizeException没有消息/进一步详细信息的类型异常。logcat异常之前的三行是
E keymaster1_device: Finish send cmd failed
E keymaster1_device: ret: 0
E keymaster1_device: resp->status: -1000
Run Code Online (Sandbox Code Playgroud)
以防万一这很重要。
有谁知道可能出了什么问题吗?
使用minSdkVersion 23
编辑:我刚刚意识到,如果我使用 PKCS#1 v1.5 填充,它就可以工作。现在这对我有帮助,但我仍然想尝试让它与 OAEP 一起工作。
加密时需要将算法参数规范放入密码中
if (algorithmParameterSpec != null) {
encrypter.init(Cipher.ENCRYPT_MODE, getKey(), algorithmParameterSpec)
}
Run Code Online (Sandbox Code Playgroud)
算法参数规范为
OAEPParameterSpec("SHA-256",
"MGF1",
MGF1ParameterSpec.SHA256,
PSource.PSpecified.DEFAULT)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |