rsa加密

来源:互联网 发布:赚佣金的软件 编辑:程序博客网 时间:2024/05/16 12:15

用JAVA实现RSA加密过程,有以下几个步骤: 

    1、甲方构建密钥对(公钥和私钥,公钥给对方,私钥留给自己) 
    2、甲方使用私钥加密数据,然后用私钥对加密后的数据签名,并把这些发送给乙方;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。 
    3、乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。 

 示例代码如下:

[html] view plaincopy
  1. package com.rsa.core;  
  2.   
  3. import java.security.Key;  
  4. import java.security.KeyFactory;  
  5. import java.security.KeyPair;  
  6. import java.security.KeyPairGenerator;  
  7. import java.security.PrivateKey;  
  8. import java.security.PublicKey;  
  9. import java.security.interfaces.RSAPrivateKey;  
  10. import java.security.interfaces.RSAPublicKey;  
  11. import java.security.spec.PKCS8EncodedKeySpec;  
  12. import java.security.spec.X509EncodedKeySpec;  
  13.   
  14. import javax.crypto.Cipher;  
  15.   
  16. import sun.misc.BASE64Decoder;  
  17. import sun.misc.BASE64Encoder;  
  18.   
  19. public class RSACoder {  
  20.   
  21.     public static PublicKey getPublicKey(String key) throws Exception {  
  22.         byte[] keyBytes;  
  23.         keyBytes = (new BASE64Decoder()).decodeBuffer(key);  
  24.         X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);  
  25.         KeyFactory keyFactory = KeyFactory.getInstance("RSA");  
  26.         PublicKey publicKey = keyFactory.generatePublic(keySpec);  
  27.         return publicKey;  
  28.     }  
  29.   
  30.     public static PrivateKey getPrivateKey(String key) throws Exception {  
  31.         byte[] keyBytes;  
  32.         keyBytes = (new BASE64Decoder()).decodeBuffer(key);  
  33.         PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);  
  34.         KeyFactory keyFactory = KeyFactory.getInstance("RSA");  
  35.         PrivateKey privateKey = keyFactory.generatePrivate(keySpec);  
  36.         return privateKey;  
  37.     }  
  38.   
  39.     /**  
  40.     * 得到密钥字符串(经过base64编码)  
  41.     * @return  
  42.     */  
  43.     public static String getKeyString(Key key) throws Exception {  
  44.         byte[] keyBytes = key.getEncoded();  
  45.         String s = (new BASE64Encoder()).encode(keyBytes);  
  46.         return s;  
  47.     }  
  48.   
  49.     public static void main(String[] args) throws Exception {  
  50.         KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");  
  51.         //密钥位数  
  52.         keyPairGen.initialize(1024);  
  53.         //密钥对  
  54.         KeyPair keyPair = keyPairGen.generateKeyPair();  
  55.         // 公钥  
  56.         PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();  
  57.         // 私钥  
  58.         PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();  
  59.         String publicKeyString = getKeyString(publicKey);  
  60.         System.out.println("public:\n" + publicKeyString);  
  61.         String privateKeyString = getKeyString(privateKey);  
  62.         System.out.println("private:\n" + privateKeyString);  
  63.         //加解密类  
  64.         Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");  
  65.         //明文  
  66.         byte[] plainText = "91686280721609".getBytes();  
  67.         //加密  
  68.         cipher.init(Cipher.ENCRYPT_MODE, publicKey);  
  69.         byte[] enBytes = cipher.doFinal(plainText);  
  70.         String s1 = new String(enBytes);  
  71.         System.out.println("加密后的密文:" + s1);  
  72.         //通过密钥字符串得到密钥  
  73.         publicKey = getPublicKey(publicKeyString);  
  74.         privateKey = getPrivateKey(privateKeyString);  
  75.         //解密  
  76.         cipher.init(Cipher.DECRYPT_MODE, privateKey);  
  77.         byte[]deBytes = cipher.doFinal(enBytes);  
  78.         publicKeyString = getKeyString(publicKey);  
  79.         System.out.println("public:\n" +publicKeyString);  
  80.         privateKeyString = getKeyString(privateKey);  
  81.         System.out.println("private:\n" + privateKeyString);  
  82.         String s = new String(deBytes);  
  83.         System.out.println(s);  
  84.     }  
  85.   
  86. }  
0 0
原创粉丝点击