`
happy9837457
  • 浏览: 5061 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RSA 加解密java实现

    博客分类:
  • java
 
阅读更多

非对称加密

 非对称加密有一对密钥,公钥和私钥。可以用公钥加密,也可以用私钥加密。不过,公钥加密必须用私钥解密,私钥加密必须用公钥解密。如果不对应,则会报这样的异常

javax.crypto.BadPaddingException: Data must start with zero

 

代码如下

  1. import java.security.KeyPair;  
  2. import java.security.KeyPairGenerator;  
  3. import javax.crypto.Cipher;  
  4.   
  5. public class RSA {  
  6.   
  7.     //公钥加密  
  8.     public byte[] PublicEncrypt(KeyPair key,String str)throws Exception {  
  9.         Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");  
  10.         cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());  
  11.         return cipher.doFinal(str.getBytes("UTF8"));  
  12.     }  
  13.       
  14.     //公钥解密  
  15.     public byte[] PublicDECRYPT (KeyPair key,byte[]  data)throws Exception {  
  16.         Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");  
  17.         cipher.init(Cipher.DECRYPT_MODE, key.getPublic());  
  18.         return cipher.doFinal(data);  
  19.     }  
  20.       
  21.     //私钥加密  
  22.     public byte[] PrivateEncrypt (KeyPair key,String str)throws Exception {  
  23.         Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");  
  24.         cipher.init(Cipher.ENCRYPT_MODE, key.getPrivate());  
  25.         return cipher.doFinal(str.getBytes("UTF8"));  
  26.     }  
  27.       
  28.     //私钥解密  
  29.     public byte[] PrivateDECRYPT(KeyPair key,byte[]  data)throws Exception  {  
  30.         Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");  
  31.         cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());  
  32.         return cipher.doFinal(data);  
  33.     }  
  34.   
  35.       
  36.     public static void main(String args[]) throws Exception {  
  37.         String str = "Hello World!";  
  38.         KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");  
  39.         keyGen.initialize(1024);  
  40.         KeyPair key = keyGen.generateKeyPair();  
  41.         test1 t = new test1();  
  42.         System.out.println("加密前原文:"+str);  
  43.         byte[] data = t.PublicEncrypt(key,str);   
  44.         System.out.println("私钥解密后:"+new String(t.PrivateDECRYPT(key,data)));  
  45.         byte[] data1 = t.PrivateEncrypt(key,str);   
  46.         System.out.println("公钥解密后:"+new String(t.PublicDECRYPT(key,data1)));  
  47.     }  
  48. }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics