我想生成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);
}
}
输出为字节值
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]
}
}
非常感谢你!如果我应该得到这样的结果[48,-137,-97,49,13,6,8,42,-122,72,-122,-9,13,2,2,3,15 4,0,3, -132,-115、0、48,-127]我应该只使用toString方法,而不是retString.append(Integer.toHexString(0x0100 +(publicKey [i]&0x00FF))。substring(1)); ??
如果我想要PEM格式的输出,该怎么办?
要输出为十六进制,更简单的解决方案是将
javax.xml.bind.DatatypeConverter.printHexBinary(publicKey)
@YatinGrover用于PEM Base 64javax.xml.bind.DatatypeConverter.printBase64Binary(publicKey)
您也可以考虑将org.apache.commons.codec.binary.Hex#encodeHexString作为从字节数组中获取十六进制字符串的一种方法。