Java 如何将字符串转换为公钥?
嗨,我是一名学习JAVA密码编程的学生。 我正在制作一个JAVA项目,它使用套接字相互发送公钥。 但在socket编程中,我只能发送string和int。 所以我将公钥从服务器发送到客户端。但客户端接收它是因为字符串,而不是公钥。我找到了KeyFactory方法。我使用KeyFactory将字符串格式化为公钥,但失败了。我只能看到InvalidKeySpecException。 我问这个问题是因为我不知道什么是错误的路线 对不起,你很难理解这个问题。 我不擅长英语,因为我的母语不是英语 下面是我的源代码Java 如何将字符串转换为公钥?,java,encryption,rsa,Java,Encryption,Rsa,嗨,我是一名学习JAVA密码编程的学生。 我正在制作一个JAVA项目,它使用套接字相互发送公钥。 但在socket编程中,我只能发送string和int。 所以我将公钥从服务器发送到客户端。但客户端接收它是因为字符串,而不是公钥。我找到了KeyFactory方法。我使用KeyFactory将字符串格式化为公钥,但失败了。我只能看到InvalidKeySpecException。 我问这个问题是因为我不知道什么是错误的路线 对不起,你很难理解这个问题。 我不擅长英语,因为我的母语不是英语 下面是我
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();
}
}
}
没有时间但
sb.append(formatter.format(“%02x”,b))的副本代码>欢迎使用堆栈溢出!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用链接改进您的问题-不要通过评论添加更多信息。谢谢您的问题缺少一个清晰的问题描述:与预期行为相比,这是一个新手错误:publicKeyBytes.toString()
,打印出来看看它的作用。如果您需要一个表示字节数组的字符串,请使用base 64对其进行编码(至少它在Java中具有内置支持),并在使用前再次对其进行解码(实际上,似乎您已将其打印出来,并且不了解其后果)。