Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字符串转换为公钥?_Java_Encryption_Rsa - Fatal编程技术网

Java 如何将字符串转换为公钥?

Java 如何将字符串转换为公钥?,java,encryption,rsa,Java,Encryption,Rsa,嗨,我是一名学习JAVA密码编程的学生。 我正在制作一个JAVA项目,它使用套接字相互发送公钥。 但在socket编程中,我只能发送string和int。 所以我将公钥从服务器发送到客户端。但客户端接收它是因为字符串,而不是公钥。我找到了KeyFactory方法。我使用KeyFactory将字符串格式化为公钥,但失败了。我只能看到InvalidKeySpecException。 我问这个问题是因为我不知道什么是错误的路线 对不起,你很难理解这个问题。 我不擅长英语,因为我的母语不是英语 下面是我

嗨,我是一名学习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中具有内置支持),并在使用前再次对其进行解码(实际上,似乎您已将其打印出来,并且不了解其后果)。