您好我是一名学习JAVA密码编程的学生。 我正在制作一个JAVA项目,它相互发送公钥并使用套接字。 但是在套接字编程中,我只能发送字符串和int。 所以我将公钥从服务器发送到客户端。但是客户端收到了字符串,而不是公钥。我找到了KeyFactory方法。我使用KeyFactory从字符串到公钥的格式化,但我失败了。只有我能看到的是InvalidKeySpecException。 我问这个问题是因为我不知道错误的界限是什么。
P.S。对不起,你很难理解这个问题。 我不擅长英语,因为我的母语不是英语
下面是我的源代码
public class TestSpace {
public static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 2);
@SuppressWarnings("resource")
Formatter formatter = new Formatter(sb);
for (byte b : bytes) {
formatter.format("%02x", b);
}
return sb.toString();
}
public static void main(String[] args) {
try {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.genKeyPair();
PublicKey pubKey = keyPair.getPublic();
PrivateKey priKey = keyPair.getPrivate();
byte[] publicKeyBytes = pubKey.getEncoded();
byte[] privateKeyBytes = priKey.getEncoded();
System.out.println("original public key : " + bytesToHex(publicKeyBytes));
System.out.println("original private key : " + bytesToHex(privateKeyBytes));
String temp1 = publicKeyBytes.toString();
String temp2 = privateKeyBytes.toString();
System.out.println("byte->string public key : " + temp1);
System.out.println("byte->string private key : " + temp2);
publicKeyBytes = temp1.getBytes();
privateKeyBytes = temp2.getBytes();
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKeyBytes));
priKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));
publicKeyBytes = pubKey.getEncoded();
privateKeyBytes = priKey.getEncoded();
System.out.println("string->byte public key : " + bytesToHex(publicKeyBytes));
System.out.println("string->byte private key : " + bytesToHex(privateKeyBytes));
}catch( NoSuchAlgorithmException|InvalidKeySpecException e) {
e.printStackTrace();
}
}
}