如何从字符串转换为publickey?

时间:2018-06-15 13:18:00

标签: java encryption rsa

您好我是一名学习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();
        }
    }
}

0 个答案:

没有答案