//生成AES密钥
KeyGenerator keygen = KeyGenerator.getInstance( "AES ");
SecureRandom random = new SecureRandom();
keygen.init(random);
Key key = keygen.generateKey();
//生成RSA密钥
KeyPairGenerator pairgen = KeyPairGenerator.getInstance( "RSA ");
SecureRandom random = new SecureRandom();
pairgen.initialize(KEYSIZE, random);
KeyPair keyPair = pairgen.generateKeyPair();
Key publicKey = keyPair.getPublic();
Key privateKey = keyPair.getPrivate();
像上面生成的密钥怎么将它们转换成合适的格式输出到一个JTextArea中。
如果我把生成密钥以文件形式输出:
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream
( "keyfile "));
out.writeObject(key);
out.close();
打开keyfile是乱码,这个密钥文件到底是以什么格式存储的呢
------解决方案--------------------
/**
* 十六进制打印
*
* @param b
* 字节
* @return 字符串
*/
public static String toHex(byte b) {
int n = b > = 0 ? b : 256 + b;
String str = Integer.toHexString(n);
if (str.length() == 1)
str = "0 " + str;
return str.toUpperCase();
}
/**
* 十六进制打印
*
* @param b
* 字节数组
* @return
*/
public static String toHex(byte[] b) {
String str = " ";
for (int i = 0; i < b.length; i++) {
str += toHex(b[i]);
}
return str;
}
------解决方案--------------------
RSA的私钥和公钥就是一串数字,比如公钥最常用的是65537,私钥也是一个非常大的数字,只不过现在把这个数字存储到一对公钥私钥里了。我记得只要把那个钥匙类toString()或者是什么的方法就可以显示出这个数字。存的文件你还是要用Object流读取,然后转化成公钥或私钥,再把内容取出来。