我需要使用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。 –