Java 生成RSA密钥对并将私有密钥编码为字符串

Java 生成RSA密钥对并将私有密钥编码为字符串,java,encryption,rsa,Java,Encryption,Rsa,我想生成512位RSA密钥对,然后将我的公钥编码为字符串。如何实现这一点?用于输出十六进制字符串 import java.security.*; public class Test { public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException { KeyPairGenerator keyGen = KeyPairGenerator.getI

我想生成512位RSA密钥对,然后将我的公钥编码为字符串。如何实现这一点?

用于输出十六进制字符串

import java.security.*;
public class Test {
    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(512);
        byte[] publicKey = keyGen.genKeyPair().getPublic().getEncoded();
        StringBuffer retString = new StringBuffer();
        for (int i = 0; i < publicKey.length; ++i) {
            retString.append(Integer.toHexString(0x0100 + (publicKey[i] & 0x00FF)).substring(1));
        }
        System.out.println(retString);
    }
}
导入java.security.*;
公开课考试{
公共静态void main(字符串[]args)抛出NoSuchAlgorithmException、NoSuchProviderException{
KeyPairGenerator keyGen=KeyPairGenerator.getInstance(“RSA”);
密钥初始化(512);
字节[]publicKey=keyGen.genKeyPair().getPublic().getEncoded();
StringBuffer retString=新的StringBuffer();
对于(int i=0;i
用于输出为字节值

import java.security.*;
public class Test {
    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(512);
        byte[] publicKey = keyGen.genKeyPair().getPublic().getEncoded();
        StringBuffer retString = new StringBuffer();
        retString.append("[");
        for (int i = 0; i < publicKey.length; ++i) {
            retString.append(publicKey[i]);
            retString.append(", ");
        }
        retString = retString.delete(retString.length()-2,retString.length());
        retString.append("]");
        System.out.println(retString); //e.g. [48, 92, 48, .... , 0, 1]
    }
}
导入java.security.*;
公开课考试{
公共静态void main(字符串[]args)抛出NoSuchAlgorithmException、NoSuchProviderException{
KeyPairGenerator keyGen=KeyPairGenerator.getInstance(“RSA”);
密钥初始化(512);
字节[]publicKey=keyGen.genKeyPair().getPublic().getEncoded();
StringBuffer retString=新的StringBuffer();
retString.append(“[”);
对于(int i=0;i
非常感谢!如果我得到这样的结果[48,-137,-97,49,13,6,8,42,-122,72,-122,-9,13,2,3,154,0,3,-132,-115,0,48,-127],我应该使用just-toString方法来代替retString.append(Integer.tohextString(0x0100+(公钥[i]&0x00FF))。substring(1))??如果我想以PEM格式输出,那么我该怎么做?要以十六进制输出,更简单的解决方案是使用
javax.xml.bind.DatatypeConverter.printHexBinary(publicKey)
@YatinGrover for PEM Base 64您可以使用
javax.xml.bind.DatatypeConverter.printBase64Binary(publicKey)也可以考虑org .Apache .Cordi.CODEC.Boo.HEX-EnCODEStrString作为从字节数组中获取十六进制字符串的方法。这是一个非常古老的问题,但请至少修复标题。您的意思似乎是公钥。警告:RSA 512位密钥完全不安全。