我正在尝试运行此pdf中的代码。例如,对于ECCKeyGeneration,我在pdf中得到以下输出而不是图1:
sun.security.ec.ECPrivateKeyImpl@58b6
Sun EC public key, 192 bits
public x coord: 4812174841545539052388802454891896756539688756781766645984
public y coord: 1161396487043052042009627836016170768650083444786081272028
parameters: secp192r1 [NIST P-192, X9.62 prime192v1] (1.2.840.10045.3.1.1)
私钥未打印到控制台/屏幕。相反,它说" sun.security.ec.ECPrivateKeyImpl@blabla"正如你在上面看到的那样。这种情况可能是什么原因?
如果您想测试,请输入以下代码:
import java.security.*;
import java.security.spec.*;
public class ECCKeyGeneration {
public static void main(String[] args) throws Exception {
KeyPairGenerator kpg;
kpg = KeyPairGenerator.getInstance("EC","SunEC");
ECGenParameterSpec ecsp;
ecsp = new ECGenParameterSpec("secp192r1");
kpg.initialize(ecsp);
KeyPair kp = kpg.genKeyPair();
PrivateKey privKey = kp.getPrivate();
PublicKey pubKey = kp.getPublic();
System.out.println(privKey.toString());
System.out.println(pubKey.toString());
}
}
答案 0 :(得分:1)
你的问题是使用java PrivateKey类的toString()方法。 toString()不一定返回对象中的所有数据,只是字符串表示。
因此,在您的情况下,您可以使用getEncoded()方法。 请注意,您的byte []可能包含不可打印的字符,因此您可能需要以可读的形式将其转换为f.e. BASE64。
PrivateKey privKey = kp.getPrivate();
byte[] data = privKey.getEncoded();
//first methode, convert to string
String privKeyString = new String(data);
System.out.println(privKeyString);
//second methode, print all byte values
for(byte value : data)
System.out.println(value);
答案 1 :(得分:1)
通常私钥值不会打印到屏幕上。因此,为toString()
(ECPrivateKey
的子类)提供PrivateKey
几乎没有意义。打印私钥值当然不安全。
当然可以打印出私钥的秘密部分;打印出secp192r1的其他参数毫无意义。如果需要,您可以从NIST或Certicom的标准文档中轻松检索它们。
ECPrivateKey ecPrivKey = (ECPrivateKey) eckp.getPrivate();
System.out.println(ecPrivKey.getS().toString(16));
请注意,如果只需要使用此方法验证是否使用了正确的私钥,最好在私钥值S上打印哈希值。
答案 2 :(得分:1)
您也可以使用:
System.out.println(Arrays.toString(kp.getPrivate().getEncoded()));