生成RSA密钥、保存到文件、从文件读取、加密、解密等操作。

来源:互联网 发布:淘宝买家秀模特 编辑:程序博客网 时间:2024/05/23 15:40

生成RSA密钥、保存到文件、从文件读取、加密、解密等操作。

java 代码
  1. import java.security.Key;   
  2. import java.security.KeyFactory;   
  3. import java.security.KeyPair;   
  4. import java.security.KeyPairGenerator;   
  5. import java.security.NoSuchAlgorithmException;   
  6. import java.security.PrivateKey;   
  7. import java.security.PublicKey;   
  8. import java.security.SecureRandom;   
  9. import java.security.interfaces.RSAPrivateKey;   
  10. import java.security.interfaces.RSAPublicKey;   
  11. import java.security.spec.InvalidKeySpecException;   
  12. import java.security.spec.PKCS8EncodedKeySpec;   
  13. import java.security.spec.X509EncodedKeySpec;   
  14. import javax.crypto.Cipher;   
  15. import org.apache.commons.configuration.ConfigurationException;   
  16. import org.apache.commons.configuration.PropertiesConfiguration;   
  17. import org.bouncycastle.jce.provider.BouncyCastleProvider;   
  18.   
  19. public class RSATest {   
  20.   
  21.     public static void main(String[] args) {   
  22.         try {   
  23.             RSATest encrypt = new RSATest();   
  24.             String encryptText = "encryptText";   
  25.   
  26.             // Generate keys   
  27.             KeyPair keyPair = encrypt.generateKey();   
  28.             RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   
  29.             RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();   
  30.   
  31.             byte[] e = encrypt.encrypt(publicKey, encryptText.getBytes());   
  32.             byte[] de = encrypt.decrypt(privateKey, e);   
  33.             System.out.println(toHexString(e));   
  34.             System.out.println(toHexString(de));   
  35.         } catch (Exception e) {   
  36.             e.printStackTrace();   
  37.         }   
  38.     }   
  39.   
  40.     public KeyPair generateKey() throws NoSuchAlgorithmException {   
  41.         KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");   
  42.         keyPairGen.initialize(1024new SecureRandom());   
  43.   
  44.         KeyPair keyPair = keyPairGen.generateKeyPair();   
  45.         return keyPair;   
  46.     }   
  47.   
  48.     public void saveKey(KeyPair keyPair, String publicKeyFile,   
  49.             String privateKeyFile) throws ConfigurationException {   
  50.         PublicKey pubkey = keyPair.getPublic();   
  51.         PrivateKey prikey = keyPair.getPrivate();   
  52.   
  53.         // save public key   
  54.         PropertiesConfiguration publicConfig = new PropertiesConfiguration(   
  55.                 publicKeyFile);   
  56.         publicConfig.setProperty("PULIICKEY", toHexString(pubkey.getEncoded()));   
  57.         publicConfig.save();   
  58.   
  59.         // save private key   
  60.         PropertiesConfiguration privateConfig = new PropertiesConfiguration(   
  61.                 privateKeyFile);   
  62.         privateConfig.setProperty("PRIVATEKEY",   
  63.                 toHexString(prikey.getEncoded()));   
  64.         privateConfig.save();   
  65.     }   
  66.   
  67.     /**  
  68.      * @param filename  
  69.      * @param type:  
  70.      *            1-public 0-private  
  71.      * @return  
  72.      * @throws ConfigurationException  
  73.      * @throws NoSuchAlgorithmException  
  74.      * @throws InvalidKeySpecException  
  75.      */  
  76.     public Key loadKey(String filename, int type)   
  77.             throws ConfigurationException, NoSuchAlgorithmException,   
  78.             InvalidKeySpecException {   
  79.         PropertiesConfiguration config = new PropertiesConfiguration(filename);   
  80.         KeyFactory keyFactory = KeyFactory.getInstance("RSA",   
  81.                 new BouncyCastleProvider());   
  82.   
  83.         if (type == 0) {   
  84.             // privateKey   
  85.             String privateKeyValue = config.getString("PULIICKEY");   
  86.             PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(   
  87.                     toBytes(privateKeyValue));   
  88.             PrivateKey privateKey = keyFactory.generatePrivate(priPKCS8);   
  89.             return privateKey;   
  90.   
  91.         } else {   
  92.             // publicKey   
  93.             String privateKeyValue = config.getString("PRIVATEKEY");   
  94.             X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(   
  95.                     toBytes(privateKeyValue));   
  96.             PublicKey publicKey = keyFactory.generatePublic(bobPubKeySpec);   
  97.             return publicKey;   
  98.         }   
  99.     }   
  100.   
  101.     /**  
  102.      * Encrypt String.  
  103.      *   
  104.      * @return byte[]  
  105.      */  
  106.     protected byte[] encrypt(RSAPublicKey publicKey, byte[] data) {   
  107.         if (publicKey != null) {   
  108.             try {   
  109.                 Cipher cipher = Cipher.getInstance("RSA",   
  110.                         new BouncyCastleProvider());   
  111.                 cipher.init(Cipher.ENCRYPT_MODE, publicKey);   
  112.                 return cipher.doFinal(data);   
  113.             } catch (Exception e) {   
  114.                 e.printStackTrace();   
  115.             }   
  116.         }   
  117.         return null;   
  118.     }   
  119.   
  120.     /**  
  121.      * Basic decrypt method  
  122.      *   
  123.      * @return byte[]  
  124.      */  
  125.     protected byte[] decrypt(RSAPrivateKey privateKey, byte[] raw) {   
  126.         if (privateKey != null) {   
  127.             try {   
  128.                 Cipher cipher = Cipher.getInstance("RSA",   
  129.                         new BouncyCastleProvider());   
  130.                 cipher.init(Cipher.DECRYPT_MODE, privateKey);   
  131.                 return cipher.doFinal(raw);   
  132.             } catch (Exception e) {   
  133.                 e.printStackTrace();   
  134.             }   
  135.         }   
  136.   
  137.         return null;   
  138.     }   
  139.   
  140.     public static String toHexString(byte[] b) {   
  141.         StringBuilder sb = new StringBuilder(b.length * 2);   
  142.         for (int i = 0; i < b.length; i++) {   
  143.             sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);   
  144.             sb.append(HEXCHAR[b[i] & 0x0f]);   
  145.         }   
  146.         return sb.toString();   
  147.     }   
  148.   
  149.     public static final byte[] toBytes(String s) {   
  150.         byte[] bytes;   
  151.         bytes = new byte[s.length() / 2];   
  152.         for (int i = 0; i < bytes.length; i++) {   
  153.             bytes[i] = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2),   
  154.                     16);   
  155.         }   
  156.         return bytes;   
  157.     }   
  158.   
  159.     private static char[] HEXCHAR = { '0', '1', '2', '3', '4', '5', '6', '7',   
  160.             '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };   
  161.   
  162. }
原创粉丝点击