大海Online的博客

Looking for Interest

java rsa code

package rsa;
import java.security.Key;  
import java.security.KeyFactory;  
import java.security.KeyPair;  
import java.security.KeyPairGenerator;  
import java.security.PrivateKey;  
import java.security.PublicKey;  
import java.security.interfaces.RSAPrivateKey;  
import java.security.interfaces.RSAPublicKey;  
import java.security.spec.PKCS8EncodedKeySpec;  
import java.security.spec.X509EncodedKeySpec;  
   
import javax.crypto.Cipher;  

import sun.misc.BASE64Decoder;  
import sun.misc.BASE64Encoder;  
   
   
public class RSAUtil {
	public static String[] initKey() throws Exception {
		KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");  
        //密钥位数  
        keyPairGen.initialize(1024);  
        //密钥对  
        KeyPair keyPair = keyPairGen.generateKeyPair();  

        // 公钥  
        PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();  

        // 私钥  
        PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();  

        String publicKeyString = getKeyString(publicKey);  
        System.out.println("public:\n" + publicKeyString);  

        String privateKeyString = getKeyString(privateKey);  
        System.out.println("private:\n" + privateKeyString);  
        return new String[]{publicKeyString, privateKeyString};
	}
	
	public static String encode(String data, String publicKey) throws Exception {
        //加解密类  
        Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");  
        cipher.init(Cipher.ENCRYPT_MODE, getPublicKey(publicKey));  

        //加密  
        byte[] enBytes = cipher.doFinal(data.getBytes("UTF-8"));  
        return new BASE64Encoder().encode(enBytes);
	}
	
	public static String decode(String data, String privateKey) throws Exception {
        //加解密类  
        Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");  
        cipher.init(Cipher.DECRYPT_MODE, getPrivateKey(privateKey));  

        //加密  
        byte[] deBytes = new BASE64Decoder().decodeBuffer(data);
        byte[] enBytes = cipher.doFinal(deBytes);  
        return new String(enBytes, "UTF-8");
	}	
	
   
      /** 
       * 得到公钥 
       * @param key 密钥字符串(经过base64编码) 
       * @throws Exception 
       */  
      private static PublicKey getPublicKey(String key) throws Exception {  
            byte[] keyBytes;  
            keyBytes = (new BASE64Decoder()).decodeBuffer(key);  
   
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);  
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");  
            PublicKey publicKey = keyFactory.generatePublic(keySpec);  
            return publicKey;  
      }  
      /** 
       * 得到私钥 
       * @param key 密钥字符串(经过base64编码) 
       * @throws Exception 
       */  
      private static PrivateKey getPrivateKey(String key) throws Exception {  
            byte[] keyBytes;  
            keyBytes = (new BASE64Decoder()).decodeBuffer(key);  
   
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);  
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");  
            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);  
            return privateKey;  
      }  
   
      /** 
       * 得到密钥字符串(经过base64编码) 
       * @return 
       */  
      private static String getKeyString(Key key) throws Exception {  
            byte[] keyBytes = key.getEncoded();  
            String s = (new BASE64Encoder()).encode(keyBytes);  
            return s;  
      }  
   
   
      public static void main(String[] args) throws Exception {  
          //明文  
          String plainText = "很好!hello world";  
          String[] keys = initKey();
          
          System.out.println(encode(plainText, keys[0]));
          System.out.println(decode(encode(plainText, keys[0]), keys[1]));
   
      }  
   
}