在Android

时间:2018-05-05 15:24:26

标签: java android kotlin sign elliptic-curve

我需要在Android上使用Elliptic Curve Key对来签名和验证字符串。我使用以下代码生成密钥对

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相关的答案感到高兴。 有人知道我在哪里可以找到好的资源或代码示例吗?

1 个答案:

答案 0 :(得分:0)

您可以从Android开发者网站上找到优质的文档:https://developer.android.com/training/articles/keystore#kotlin 有一些示例说明如何生成,存储在密钥库中,签名和验证数据。

已编辑

例如,创建一个密钥对

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()

如果要与服务器共享公用密钥

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)
    }