我需要使用ECDSA算法对消息进行签名并发送给接收方。然后,接收方应验证发件人的签名。将字节数组转换为publickey ECDSA
所以,对于这一点,接收器由波纹管命令转换java.security.PublicKey
到字节数组之后,但在字节数组格式发送者的公钥:
byte[] byteArrayPublicKey = publickey.getEncoded();
在ECDSA算法(公共密钥将其转换为之前的格式字节数组)是如下:
公钥:
X: 8a83c389e7bb817c17bf2db4ed71055f18342b630221b2a3a1ca752502dc2e21
Y: 3eaf48c9ab1700fe0966a0cde196b85af66bb8f0bacef711c9dca2368f9d8470
但是,问题是该字节数组转换为可用的格式到v通过接收器验证java.security.PublicKey
的签名。
通常,有没有解决方案来验证签名而不将其转换为字节数组?换句话说,问题是使用任何方法验证发件人公钥的签名。
如果你的'PublicKey.getEncoded()'的结果是**不**只是公共点X和Y;它还包含一个包含参数的AlgId。 Java调用“X509”编码,你可以直接将它提供给'KeyFactory.getInstance(“EC”)。generatePublic()'。如果你实际上只有单独的点坐标**和曲线**,请参阅http://stackoverflow.com/questions/22646792/how-does-one-convert-a-public-ec-code-point-and-curve -name-into-a-publickey和http://stackoverflow.com/questions/30445997/loading-raw-64-byte-long-ecdsa-public-key-in-java。 –