android - Android Keystore EDCSA (secp256r1) 公钥始终无效
问题描述
我目前正在尝试使用 Android 密钥库创建 EDCSA 密钥对。创建工作正常,但将密钥发送到后端时,我收到“无效的 EDCSA 密钥”。我对后端实现一无所知。
网站:https ://kjur.github.io/jsrsasign/sample/sample-ecdsa.html
还将创建的密钥标记为具有无效签名。
我的代码如下:
val keyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore")
keyPairGenerator.initialize(
KeyGenParameterSpec.Builder(
"key4",
KeyProperties.PURPOSE_SIGN)
.setAlgorithmParameterSpec(ECGenParameterSpec("secp256r1"))
.setDigests(KeyProperties.DIGEST_SHA256)
.setUserAuthenticationRequired(false)
.build())
val keyPair = keyPairGenerator.generateKeyPair()
val p = KeyFactory.getInstance(keyPair.public.getAlgorithm()).generatePublic(
X509EncodedKeySpec(keyPair.public.getEncoded()))
hexPublic = Hex.toHexString(p.encoded)
导致例如:
Public-Key: (256 bit)
00000000 04 6e 33 8a 49 1a 96 de e8 b6 53 a7 b6 4a df 33 |.n3.I.....S..J.3|
00000010 b5 23 ce 92 2d 39 2e a2 f0 cc 19 ec 54 cf ad d7 |.#..-9......T...|
00000020 6e e1 ce 78 c7 61 c4 01 f4 7b 64 2a a4 32 03 4b |n..x.a...{d*.2.K|
00000030 8d 29 e4 8f 16 6e d6 82 ce bf 07 b9 30 97 15 ff |.)...n......0...|
00000040 d1 |.|
从上面编码的结果是:
3059301306072a8648ce3d020106082a8648ce3d030107034200046e338a491a96dee8b653a7b64adf33b523ce922d392ea2f0cc19ec54cfadd76ee1ce78c761c401f47b642aa432034b8d29e48f166ed682cebf07b9309715ffd1
经过初步搜索,我发现了以下内容:
KeyFactory.getInstance(keyPair.public.getAlgorithm()).generatePublic(X509EncodedKeySpec(keyPair.public.getEncoded()))
从我的密钥中删除不必要的填充。
但关键看起来仍然与网站创建的示例不同:
04d8888078160aa934ace1745efb1d00ddec4a0e73ea93931902784c57c6ac604df3898241c1925e42907419d6d0ce5956d4109964608749aedc69e1e532c018c9
上面的公钥内容(未编码)似乎具有正确的格式,但是在网站上尝试时,它仍然被标记为无效签名。
我不确定如何从密钥中获取正确的值,我很高兴得到任何指示和/或帮助。
pS 试过:如何生成有效的 ECDSA EC 密钥对?
这也不起作用。
更新 发现我们需要一个 ASIN 9.63 密钥格式才能使其与后端一起使用
先感谢您
解决方案
推荐阅读
- python - 使用python动态创建和更新odoo qweb报告中的表行和列
- javascript - Redux 状态正在返回数组字段中的 html 内容
- r - Ifelse 和 mutate 在 R 中创建新列
- dynamics-crm - 使用 javascript 对 Power bi 报告的更改并非每次都适用
- c++ - BOOST::CRC 使用 process.block() 方法创建校验和
- php - 与 PHP 字符串关联的编码/字符集
- php - 扩展具有额外要求的阵列
- github - 一次推送到多个 github 仓库
- html - devtools 中的 CSS webkit-sticky 无效属性
- java - 为什么java System.out.print 方法有多种形式?