在 Android 上使用椭圆曲线密钥对
Using Elliptic Curve Key Pair on Android
我需要在 Android 上使用椭圆曲线密钥对来签署和验证字符串。我使用以下代码生成密钥对
val parameterSpec = ECNamedCurveTable.getParameterSpec("secp160r1")
fun genKeyPair(): KeyPair{
val keyPairGenerator = KeyPairGenerator.getInstance(
"EC", "SC")
keyPairGenerator.initialize(parameterSpec, SecureRandom())
val keyPair: KeyPair = keyPairGenerator.genKeyPair()
return keyPair
}
该应用程序是用 Kotlin 编写的,但我也对任何 Java 相关的答案感到满意。
有人知道我在哪里可以找到好的资源或代码示例吗?
您可以从 Android 开发者网站找到很好的文档:https://developer.android.com/training/articles/keystore#kotlin
有如何生成、存储在密钥库、签名和验证数据的示例。
已编辑
例如创建KeyPair
val kpg: KeyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC,
"AndroidKeyStore")
val parameterSpec: KeyGenParameterSpec = KeyGenParameterSpec.Builder("alias",
KeyProperties.PURPOSE_SIGN).run {
setDigests(KeyProperties.DIGEST_SHA256)
build()
}
kpg.initialize(parameterSpec)
val keyPair = kpg.generateKeyPair()
如果您想与服务器共享 public 密钥
val pubKey = keyPair.public
val pubKeyString = String(Base64.encode(pubKey.encoded, 0))
签署数据
val signature: ByteArray = Signature.getInstance("SHA256withECDSA").run {
initSign(privKey)
update(data)
sign()
}
验证数据
val valid: Boolean = Signature.getInstance("SHA256withECDSA").run {
initVerify(pubKey)
update(data)
verify(signature)
}
我需要在 Android 上使用椭圆曲线密钥对来签署和验证字符串。我使用以下代码生成密钥对
val parameterSpec = ECNamedCurveTable.getParameterSpec("secp160r1")
fun genKeyPair(): KeyPair{
val keyPairGenerator = KeyPairGenerator.getInstance(
"EC", "SC")
keyPairGenerator.initialize(parameterSpec, SecureRandom())
val keyPair: KeyPair = keyPairGenerator.genKeyPair()
return keyPair
}
该应用程序是用 Kotlin 编写的,但我也对任何 Java 相关的答案感到满意。 有人知道我在哪里可以找到好的资源或代码示例吗?
您可以从 Android 开发者网站找到很好的文档:https://developer.android.com/training/articles/keystore#kotlin 有如何生成、存储在密钥库、签名和验证数据的示例。
已编辑
例如创建KeyPair
val kpg: KeyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC,
"AndroidKeyStore")
val parameterSpec: KeyGenParameterSpec = KeyGenParameterSpec.Builder("alias",
KeyProperties.PURPOSE_SIGN).run {
setDigests(KeyProperties.DIGEST_SHA256)
build()
}
kpg.initialize(parameterSpec)
val keyPair = kpg.generateKeyPair()
如果您想与服务器共享 public 密钥
val pubKey = keyPair.public
val pubKeyString = String(Base64.encode(pubKey.encoded, 0))
签署数据
val signature: ByteArray = Signature.getInstance("SHA256withECDSA").run {
initSign(privKey)
update(data)
sign()
}
验证数据
val valid: Boolean = Signature.getInstance("SHA256withECDSA").run {
initVerify(pubKey)
update(data)
verify(signature)
}