如何解决Android:如何使用 RSA 签名?
我正在尝试对消息进行签名,但在加密和解密工作时,我总是收到此不兼容目的错误来进行签名。
我如何生成密钥:
fun generate(): KeyPair? {
val kpg: KeyPairGenerator = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA,"AndroidKeyStore"
)
val parameterSpec: KeyGenParameterSpec = KeyGenParameterSpec.Builder(
"rsa",KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT or KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY or KeyProperties.PURPOSE_WRAP_KEY
).run {
setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
setDigests(KeyProperties.DIGEST_SHA256,KeyProperties.DIGEST_SHA512)
build()
}
kpg.initialize(parameterSpec)
return kpg.generateKeyPair()
}
我实际上是这样称呼它的:
val kp = Encryption.generateKeys()!!
我尝试签名的方式:
val signature: ByteArray = Signature.getInstance("SHA256withRSA").run {
initSign(pvKey)
update(text.toByteArray())
sign()
}
堆栈跟踪:
Caused by: java.security.InvalidKeyException: Keystore operation Failed
at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1378)
at android.security.KeyStore.getInvalidKeyException(KeyStore.java:1388)
at android.security.keystore.KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit(KeyStoreCryptoOperationUtils.java:54)
at android.security.keystore.AndroidKeyStoreSignatureSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreSignatureSpiBase.java:219)
at android.security.keystore.AndroidKeyStoreSignatureSpiBase.engineInitSign(AndroidKeyStoreSignatureSpiBase.java:99)
at android.security.keystore.AndroidKeyStoreSignatureSpiBase.engineInitSign(AndroidKeyStoreSignatureSpiBase.java:77)
at java.security.Signature$Delegate.init(Signature.java:1357)
at java.security.Signature$Delegate.chooseProvider(Signature.java:1310)
at java.security.Signature$Delegate.engineInitSign(Signature.java:1385)
at java.security.Signature.initSign(Signature.java:679)
at com.cannondev.messaging.utils.Encryption.sign(Encryption.kt:64)
at com.cannondev.messaging.MessagingService.send(MessagingService.kt:78)
at com.cannondev.messaging.ui.ConversationFragment.sendText(ConversationFragment.kt:114)
at com.cannondev.messaging.ui.ConversationFragment.access$sendText(ConversationFragment.kt:33)
at com.cannondev.messaging.ui.ConversationFragment$onCreateView$1.onClick(ConversationFragment.kt:106)
at android.view.View.performClick(View.java:7448)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.security.KeyStoreException: Incompatible purpose
at android.security.KeyStore.getKeyStoreException(KeyStore.java:1301)
异常是在 initSign 这一行引起的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。