2012年3月11日星期日

RSA使用X509EncodedKeySpec、PKCS8EncodedKeySpec生成公钥和私钥


Java代码 
  1. private static final String KEY_ALGORITHM = "RSA";    
  2. private static final String PUBLIC_KEY ="publicKey";  
  3. private static final String PRIVATE_KEY ="privateKey";   
  4.        public static void main(String[] args) throws Exception{  
  5.     Map<String,String> keyMap = genKey();  
  6.     RSAPublicKey publicKey = getPublicKey(keyMap.get(PUBLIC_KEY));  
  7.     RSAPrivateKey privateKey = getPrivateKey(keyMap.get(PRIVATE_KEY));  
  8.     String info ="明文123456";  
  9.     //加密  
  10.     byte[] bytes = encrypt(info.getBytes("utf-8"),publicKey);  
  11.     //解密  
  12.     bytes = decrypt(bytes, privateKey);  
  13.     System.out.println(new String(bytes,"utf-8"));  
  14.        
  15. }  
  16.   
  17. public static Map<String,String> genKey() throws NoSuchAlgorithmException{  
  18.     Map<String,String> keyMap = new HashMap<String,String>();  
  19.     KeyPairGenerator keygen = KeyPairGenerator.getInstance(KEY_ALGORITHM);  
  20.     SecureRandom random = new SecureRandom();  
  21.     // random.setSeed(keyInfo.getBytes());  
  22.     // 初始加密,512位已被破解,用1024位,最好用2048位  
  23.     keygen.initialize(1024, random);  
  24.     // 取得密钥对  
  25.     KeyPair kp = keygen.generateKeyPair();  
  26.     RSAPrivateKey privateKey = (RSAPrivateKey)kp.getPrivate();  
  27.         String privateKeyString = Base64.encode(privateKey.getEncoded());  
  28.     RSAPublicKey publicKey = (RSAPublicKey)kp.getPublic();   
  29.     String publicKeyString = Base64.encode(publicKey.getEncoded());  
  30.     keyMap.put(PUBLIC_KEY, publicKeyString);  
  31.     keyMap.put(PRIVATE_KEY, privateKeyString);  
  32.     return keyMap;  
  33. }  
  34.   
  35. public static RSAPublicKey getPublicKey(String publicKey) throws Exception{  
  36.     byte[] keyBytes = LBase64.decode(publicKey);  
  37.     X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);  
  38.     KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);  
  39.     return (RSAPublicKey) keyFactory.generatePublic(spec);  
  40. }  
  41.   
  42. public static RSAPrivateKey getPrivateKey(String privateKey) throws Exception{  
  43.     byte[] keyBytes = LBase64.decode(privateKey);  
  44.     PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);  
  45.     KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);  
  46.     return (RSAPrivateKey) keyFactory.generatePrivate(spec);  
  47. }  

没有评论:

发表评论