RSA加密是非对称加密,密钥对分公钥与私钥。公钥是用来给别人加密的。但是呢,java生成的publicKey的getEncode方法返回的是java格式的公钥,其它平台是认识不了的。
例如生成512的公钥:
305C300D06092A864886F70D0101010500034B003048024100925FC3FC103F6E2209E77D8FAF59B48DE06AE86471CDD5D5A4FCA6A06070C38578F49444A73222A9B3DAFC8C71C2BE14ECDA5EDA0667BA91182CCB3546BB85AF0203010001
这个明显不止64个bytes。我们今天就说一下这个。
先看段生成公钥的代码:
public static TKeyPair RSAinitKey(int Length) throws Exception {
KeyPairGenerator keyPairGen;
keyPairGen = KeyPairGenerator
.getInstance("RSA");
keyPairGen.initialize(Length);
KeyPair keyPair = keyPairGen.generateKeyPair();
X509EncodedKeySpec keySpec=new X509EncodedKeySpec(keyPair.getPublic().getEncoded());
// X509EncodedKeySpec priKeySpec=new X509EncodedKeySpec(keyPair.getPrivate().getEncoded());
KeyFactory keyFactory=KeyFactory.getInstance("RSA");
RSAPublicKey publickey=(RSAPublicKey) keyFactory.generatePublic(keySpec);
//PrivateKey privatekey=keyFactory.generatePrivate(priKeySpec);
return new TKeyPair(keyPair.getPrivate().getEncoded(),publickey.getEncoded());
}
private static void test3() {
try {
TKeyPair keypair = CertificateUtil.RSAinitKey(512)