Мне нужно использовать алгоритм ECDSA, чтобы подписать сообщение и отправить его получателю в java. Затем приемник должен проверить подпись отправителя.Преобразование байтового массива в publickey ECDSA
Таким образом, для этого, ресивер имеет открытый ключ отправителя, но в формате массива байтов после преобразования java.security.PublicKey
в массив байтов с помощью команды ниже:
byte[] byteArrayPublicKey = publickey.getEncoded();
Формат открытого ключа в алгоритме ECDSA (до его преобразования байтовый массив) выглядит следующим образом:
Public Key:
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-in-a-publickey и http://stackoverflow.com/questions/30445997/loading-raw-64-byte-long-ecdsa-public-key-in-java. –