Я работаю с некоторым Android-кодом Java, который использует ключи ECDSA.Код компилируется и работает нормально, но имеет некоторые логические ошибки в процессе проверки.Я хочу попробовать использовать пару постоянных ключей (это, как известно, является действительным) для устранения неполадок в программе.
Используя онлайн-генератор , я получил открытый ключ EC в шестнадцатеричном виде,
1007 * 0x044fb7cebbb1f4a1e0412c8e0b6f2d675ebfee000c5e860a81ffd795b5743033dec0e114abfba3de8db8705fc8ed985c5550c66a6ee9fdd258d058a2ef749eba78
Как и действующий закрытый ключ для завершения пары,
0x0c84e7e707b31ecf0254e8cb3040513883d92d81e977ad4754a409a6ab18ee51
можно преобразоватьшестнадцатеричная строка в примитивном байтовом массиве, но этот байтовый массив представляется неверным.Я не могу понять, как преобразовать шестнадцатеричное представление моих ключей в представление X509, чтобы я мог сделать ключевой объект Java.
KeyFactory mFactory = KeyFactory.getInstance("EC");
X509EncodedKeySpec mPublicKey = new X509EncodedKeySpec(publicKeyBytes);
PublicKey publicKey = mFactory.generatePublic(mPublicKey);
Этот код приводит к:
java.security.spec.InvalidKeySpecException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: Error parsing public key
Я вполне уверен, что мое преобразование из шестнадцатеричной строки в байтовый массив работает, но я также включу этот метод для проверки работоспособности.
private static byte[] hexStringToByteArray(String s) throws IllegalArgumentException {
int len = s.length();
if (len % 2 == 1) {
throw new IllegalArgumentException("Hex string must have even number of characters");
}
byte[] data = new byte[len / 2]; // Allocate 1 byte per 2 hex characters
for (int i = 0; i < len; i += 2) {
// Convert each character into a integer (base-16), then bit-shift into place
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
Конечная цель - иметь постоянный действительный PublicKey/ PrivateKey объект для тестирования.Любой совет о том, как генерировать эти объекты, будет принята с благодарностью.