0

Ich muss ECC-Verifizierung mit angegebenen öffentlichen und privaten Schlüsseln testen. Ich habe Methoden für die zufällige Schlüsselgenerierung gefunden, aber es gibt keine Setter für bestimmte öffentliche/private Schlüssel. Wie legen Sie öffentliche/private Schlüssel als Byte-Array fest?ECC öffentliche und private Keysetter

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(); 

Antwort

0

für codierte Schlüssel verwendet:

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); 
} 

Für unverschlüsselt:

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

Öffentliche und private Schlüssel können nicht festgelegt werden, da sie generiert werden sollten.

Dementsprechend können Sie es nicht einstellen.

Normalerweise können Sie eine Nachricht codieren und den öffentlichen Schlüssel in die Codierungsmethode einfügen. Sie haben eine "ImportParameters" -Funktion wie in C#, wo Sie einen "Key" in den gewählten Algorithmus wie RSA importieren können.

Bearbeiten: Nach THIS Antwort können Sie so importieren.

Ich würde vorschlagen, dass Sie die Schlüssel erzeugen, speichern sie eine Serialisierung als JSON oder etwas verwenden, so dass Sie importieren können, deserialise und sie in dem Verfahren erneut importieren

+0

Ich brauche sie zu generieren, speichern und später wiederverwenden. – Justas

+0

Ich würde vorschlagen, Sie generieren die Schlüssel, speichern Sie sie mit einer Serialisierung als JSON oder etwas, so dass Sie importieren, deserialisieren und importieren Sie sie in der Methode wieder. – Marius

Verwandte Themen