public RSAPublicKey bytes2PK(byte[] buf) {
buf=Base64.decode(buf);
byte size=buf[0];
byte size2=buf[1];
byte[] b1 = new byte[size];
System.arraycopy(buf,2,b1,0,b1.length);
byte[] b2 = new byte[size2];
System.arraycopy(buf,b1.length+2,b2,0,b2.length);
BigInteger B1 = new BigInteger(b1);
BigInteger B2 = new BigInteger(b2);
RSAPublicKeySpec spec = new RSAPublicKeySpec(B1, B2);//存儲的就是這兩個大整形數
KeyFactory keyFactory;
PublicKey pk = null;
try {
keyFactory = KeyFactory.getInstance("RSA");
pk = keyFactory.generatePublic(spec);
} catch (Exception e) {
e.printStackTrace();
}
return (RSAPublicKey)pk;
}
公鑰所包含的數據,實際上就是modulus、publicExponent這兩個。都可以用byte數組的方式表示。我這邊為了網絡傳輸方便,將兩個byte數組拼接在了壹起。實際上分開存儲更容易理解。