0

我需要使用给定的公钥和私钥来测试ECC验证。我找到了生成随机密钥的方法,但没有用于特定公钥/私钥的设置器。如何将公钥/私钥设置为字节数组?ECC公钥和私钥设置器

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#一样的功能,你可以在其中导入一个“Key”到像RSA这样的算法中。

编辑: 根据THIS的答案,你可以像这样导入。

我建议你生成密钥,使用的序列化JSON什么的存储它们,因此你可以导入,deserialise和方法再次

+0

我将需要它们以后生成,存储和重用。 – Justas

+0

我建议你生成密钥,使用序列化方式将它们存储为JSON或其他东西,这样可以导入,反序列化并再次将它们导入到方法中。 – Marius