- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为此目的生成一个 RSA key 对:
val purposes = PURPOSE_DECRYPT or PURPOSE_ENCRYPT or PURPOSE_SIGN or PURPOSE_VERIFY
这是我的 key 生成代码:
val generator = KeyPairGenerator.getInstance(
KEY_ALGORITHM,
ANDROID_KEY_STORE
)
generator?.initialize(
KeyGenParameterSpec.Builder(
alias,
purposes
)
.setDigests(KeyProperties.DIGEST_SHA256)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
.build()
)
generator?.generateKeyPair()
然而,当我使用这个目的时,解密不起作用并抛出异常:
InvalidKeyException: "keystore operation failed. Incompatible purpose."
但是当我只尝试加密和解密时, keystore 会完美地加密和解密。这是我用于的目的:
val purposes = PURPOSE_DECRYPT or PURPOSE_ENCRYPT
这些是加密和解密的方法:
private fun decrypt(cipherText: String, alias: String): String? {
return try {
val privateKeyEntry = getGeneratedPrivateKey(alias)
val output = Cipher.getInstance(
"$KEY_ALGORITHM_RSA/$BLOCK_MODE_ECB/$ENCRYPTION_PADDING_RSA_PKCS1"
// ANDROID_OPEN_SSL
)
output.init(Cipher.DECRYPT_MODE, privateKeyEntry?.privateKey)
val inputStream = ByteArrayInputStream(
android.util.Base64.decode(
cipherText,
android.util.Base64.NO_WRAP
)
)
val res = String(CipherInputStream(inputStream, output).readBytes(), Charsets.UTF_8)
res
} catch (e: Exception) {
e.printStackTrace()
null
}
}
private fun encrypt(plainText: String, alias: String): String? {
return try {
val publicKey = getGeneratedPublicKey(alias) ?: setupKeyPair(
alias,
PURPOSE_ENCRYPT or PURPOSE_DECRYPT
)?.public
val cipher = Cipher.getInstance(
"$KEY_ALGORITHM_RSA/$BLOCK_MODE_ECB/$ENCRYPTION_PADDING_RSA_PKCS1"
// ANDROID_OPEN_SSL
)
cipher.init(Cipher.ENCRYPT_MODE, publicKey)
val outputStream = ByteArrayOutputStream()
val cipherOutputStream = CipherOutputStream(outputStream, cipher)
cipherOutputStream.write(plainText.toByteArray(charset("UTF-8")))
cipherOutputStream.close()
val encryptedText = outputStream.toByteArray()
outputStream.close()
val res = android.util.Base64.encodeToString(encryptedText, android.util.Base64.NO_WRAP)
res
} catch (e: Exception) {
e.printStackTrace()
null
}
}
那么问题是什么?如何在 Android keystore 中制作多用途 key 对?
最佳答案
可能您有自己的purpose keys
自定义变量
您应该在这一行中使用 KeyProperties
:
val purposes = PURPOSE_DECRYPT or PURPOSE_ENCRYPT or PURPOSE_SIGN or PURPOSE_VERIFY
像这样:
val purposes = KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT or KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY
关于Android Keystore 多用途 key 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59468307/
我目前正在构建一个 android 自定义 rom,它将仅由语音控制:所以我在 android 源代码中遇到了这部分代码: // refuse 2 active AudioRecord clients
我正在尝试为此目的生成一个 RSA key 对: val purposes = PURPOSE_DECRYPT or PURPOSE_ENCRYPT or PURPOSE_SIGN or PURPOS
我是新手,刚开始了解 node.js(PHP 开发人员背景)。我在 nodejs 网站上看过一些 nodeJs 示例和视频。 目前我正在运行一个视频网站,并且在后台需要执行许多任务。目前这是由调用 p
这不完全是一个技术问题,因为我对 C 的了解足以完成我需要做的事情(我的意思是,就不要“让语言妨碍你”而言),所以这个问题基本上是一个“采取什么方向”的问题。 情况是:我目前正在上一门高级算法类(cl
我在使用 Iscroll5 时遇到一些问题,它不能水平滚动。我正在尝试做什么。 1.) 分配给类,所以我可以多次使用它(我已经可以通过推送数组来完成这部分) 2.) 将每张幻灯片设置为 100% 宽度
我是一名优秀的程序员,十分优秀!