0

Мне нужно проверить проверку ECC с помощью открытых и закрытых ключей. Я нашел методы генерации случайных ключей, но не существует сеттеров для определенных открытых/закрытых ключей. Как установить публичные/частные ключи в качестве массива байтов?ECC public и private keys seters

byte[] privateKeyBytes = new byte[]{(byte)0x24, (byte)0xF4, (byte)0x36, (byte)0x16, (byte)0xD0, (byte)0x96, (byte)0x12, (byte)0x63, (byte)0x90, (byte)0x2E, (byte)0x51, (byte)0xF6, (byte)0x87, (byte)0x55, (byte)0xAB, (byte)0xCB, (byte)0x5D, (byte)0xAC, (byte)0x56, (byte)0x1A, (byte)0xA5, (byte)0xFA, (byte)0x55, (byte)0xDB}; 
byte[] publicKeyBytes = new byte[]{(byte)0x71, (byte)0x0B, (byte)0xCD, (byte)0xF8, (byte)0xEE, (byte)0x7F, (byte)0x36, (byte)0x32, (byte)0xF4, (byte)0x3E, (byte)0x8B, (byte)0x20, (byte)0x54, (byte)0xF7, (byte)0x84, (byte)0x26, (byte)0x4E, (byte)0x96, (byte)0xD9, (byte)0xBA, (byte)0x0F, (byte)0x82, (byte)0x84, (byte)0x2D, (byte)0xC1, (byte)0x31, (byte)0xE0, (byte)0xBF, (byte)0x9F, (byte)0x60, (byte)0x5F, (byte)0xAE, (byte)0x3A, (byte)0xA1, (byte)0x43, (byte)0x50, (byte)0x88, (byte)0x87, (byte)0xFE, (byte)0x49, (byte)0x6C, (byte)0x1F, (byte)0xF6, (byte)0x82, (byte)0x73, (byte)0xD8, (byte)0x77, (byte)0x8F}; 

KeyPair pair = g.generateKeyPair(); 
PublicKey pubKey = pair.getPublic(); 
PrivateKey prikey = pair.getPrivate(); 

ответ

0

Используется для закодированных ключей:

private static PrivateKey generatePrivateKey(KeyFactory factory, byte[] content){ 
    PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(content); 
    return factory.generatePrivate(privKeySpec); 
} 

private static PublicKey generatePublicKey(KeyFactory factory, byte[] content) { 
    X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(content); 
    return factory.generatePublic(pubKeySpec); 
} 

Для некодированных:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("secp192r1"); 

ECPrivateKeySpec ecPrivateKeySpec = new ECPrivateKeySpec(new BigInteger(1, privateKeyBytes), spec); 

ECNamedCurveSpec params = new ECNamedCurveSpec("secp192r1", spec.getCurve(), spec.getG(), spec.getN()); 
java.security.spec.ECPoint w = new java.security.spec.ECPoint(new BigInteger(1, Arrays.copyOfRange(publicKeyBytes, 0, 24)), new BigInteger(1, Arrays.copyOfRange(publicKeyBytes, 24, 48))); 
PublicKey publicKey = factory.generatePublic(new java.security.spec.ECPublicKeySpec(w, params)); 
1

Открытые и закрытые ключи не могут быть установлены, поскольку они должны быть сгенерированы.

В соответствии с этим вы не сможете установить его.

Обычно вы можете кодировать сообщение и помещать открытый ключ в метод кодирования. Mabye у вас есть «ImportParameters» -функция, как на C#, где вы можете импортировать «ключ» в выбранный алгоритм, такой как RSA.

Редактировать: Согласно THIS ответ, вы можете импортировать как это.

Я хотел бы предложить вам сгенерировать ключи, хранить их, используя сериализацию как JSON или что-то, так что вы можете импортировать, deserialise и импортировать их в методе снова

+0

Мне понадобятся они для последующего создания, хранения и повторного использования. – Justas

+0

Я бы предложил вам сгенерировать ключи, сохранить их, используя сериализацию как JSON или что-то еще, чтобы вы могли импортировать, десериализовать и импортировать их в метод снова. – Marius