RAS加密解密+base64编码


public class EncryptAndDecrypt {

  static final Base64.Encoder encoder = Base64.getEncoder();
  static final Base64.Decoder decoder = Base64.getDecoder();
  
	
  public static void main(String[] args) {
	 // base64Encrypt();
	 try{
		 EncryptAndDecrypt encryptAndDecrypt = new EncryptAndDecrypt();
		 String enmsg =  encryptAndDecrypt.RASEncrypt("大鹏一日同风起,扶摇直上九万里");
		 String demsg = encryptAndDecrypt.RASDecrypt(enmsg);
         System.out.println("加密后-----------:  "+enmsg);
         System.out.println("解密后-----------:  "+demsg);
	 }catch (Exception e) {
		// TODO: handle exception
	}
  }
  
   static void RAS()throws NoSuchAlgorithmException{
	   /*创建非对称加密的公钥和私钥示例 将生成的公钥和私钥用Base64编码后打印出来*/
		  KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
		  keyPairGenerator.initialize(2048); //一般加密位数为1024 对安全要求较高的情况下可以使用2048
		  KeyPair keyPair = keyPairGenerator.generateKeyPair();
		  RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
		  RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
	
		  
		  System.out.println(publicKey);
		  System.out.println(privateKey.getFormat());
	  
//		  System.out.println(new String(encoder.encodeToString(publicKey.getEncoded())));
//		  System.out.println(new String(encoder.encodeToString(privateKey.getEncoded())));
		  try{
			  Cipher cipher = Cipher.getInstance("RSA");
			  String msg="不破楼兰终不还";
			  cipher.init(Cipher.ENCRYPT_MODE, publicKey);
			  String enmsg = encoder.encodeToString(cipher.doFinal(msg.getBytes()));
			  
			  System.out.println("enmsg:" + enmsg);
			  
			  Cipher cipher2 = Cipher.getInstance("RSA");
			  cipher2.init(Cipher.DECRYPT_MODE, privateKey);
			  
			  String demsg = new String(cipher2.doFinal(decoder.decode(enmsg)), "UTF-8");
			  System.out.println();
			  System.out.println("demsg:" + demsg);
			  
		  }catch(Exception  e){
			  e.printStackTrace();
		  }
   }
   
  
   static PublicKey getRasPublicKey(){
	   
		  Base64.Decoder decoder = Base64.getDecoder();
		  PublicKey   publicKey = null;
	      String pubKey ="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVRiDkEKXy/KBTe+UmkA+feq1zGWIgBxkgbz7aBJGb5+eMKKoiDRoEHzlGndwFKm4mQWNftuMOfNcogzYpGKSEfC7sqfBPDHsGPZixMWzL3J10zkMTWo6MDIXKKqMG1Pgeq1wENfJjcYSU/enYSZkg3rFTOaBSFId+rrPjPo7Y4wIDAQAB";
	   
	      X509EncodedKeySpec bobPubKeySpec  = new X509EncodedKeySpec(decoder.decode(pubKey));
	   try{
		   KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		   publicKey = keyFactory.generatePublic(bobPubKeySpec);
		   
		
	   }catch(NoSuchAlgorithmException e){
		   e.printStackTrace();
	   } catch (InvalidKeySpecException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	    return publicKey;
   }
   
   static PrivateKey  getRasPrivateKey(){
	   Base64.Decoder decoder = Base64.getDecoder();
	   PrivateKey   privateKey = null;
	   String priKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJVGIOQQpfL8oFN75SaQD596rXMZYiAHGSBvPtoEkZvn54woqiINGgQfOUad3AUqbiZBY1+24w581yiDNikYpIR8Luyp8E8MewY9mLExbMvcnXTOQxNajowMhcoqowbU+B6rXAQ18mNxhJT96dhJmSDesVM5oFIUh36us+M+jtjjAgMBAAECgYABtnxKIabF0wBD9Pf8KUsEmXPEDlaB55LyPFSMS+Ef2NlfUlgha+UQhwsxND6CEKqS5c0uG/se/2+4l0jXz+CTYBEh+USYB3gxcMKEo5XDFOGaM2Ncbc7FAKJIkYYN2DHmr4voSM5YkVibw5Lerw0kKdYyr0Xd0kmqTok3JLiLgQJBAOGZ1ao9oqWUzCKnpuTmXre8pZLmpWPhm6S1FU0vHjI0pZh/jusc8UXSRPnx1gLsgXq0ux30j968x/DmkESwxX8CQQCpY1+2p1aX2EzYO3UoTbBUTg7lCsopVNVf41xriek7XF1YyXOwEOSokp2SDQcRoKJ2PyPc2FJ/f54pigdsW0adAkAM8JTnydc9ZhZ7WmBhOrFuGnzoux/7ZaJWxSguoCg8OvbQk2hwJd3U4mWgbHWY/1XB4wHkivWBkhRpxd+6gOUjAkBH9qscS52zZzbGiwQsOk1Wk88qKdpXku4QDeUe3vmSuZwC85tNyu+KWrfM6/H74DYFbK/MzK7H8iz80uJye5jVAkAEqEB/LwlpXljFAxTID/SLZBb+bCIoV/kvg+2145F+CSSUjEWRhG/+OH0cQfqomfg36WrvHl0g/Xw06fg31HgK";

       PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(decoder.decode(priKey));
       
       try{
    	   KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    	   privateKey = keyFactory.generatePrivate(priPKCS8);
    	   
       }catch (NoSuchAlgorithmException e) {
		// TODO: handle exception
    	   e.printStackTrace();
	} catch (InvalidKeySpecException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
        return privateKey;
   }
   

   public String RASEncrypt(String msg){
	   
      try{
    	  RSAPublicKey publicKey = (RSAPublicKey) getRasPublicKey();
          Cipher cipher = Cipher.getInstance("RSA");
    	  cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    	  String enmsg = encoder.encodeToString(cipher.doFinal(msg.getBytes()));
    	  
    	  return enmsg;
    	  
    }catch (NoSuchAlgorithmException e) {
    	  e.printStackTrace();
		// TODO: handle exception
	} catch (InvalidKeyException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (NoSuchPaddingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IllegalBlockSizeException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (BadPaddingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}catch (Exception e) {
		e.printStackTrace();
	}
	   return null;
   }
	
   public String RASDecrypt(String enmsg){
	   
	   RSAPrivateKey privateKey = (RSAPrivateKey) getRasPrivateKey();
		try{
	        Cipher cipher2 = Cipher.getInstance("RSA");
		    cipher2.init(Cipher.DECRYPT_MODE, privateKey);
		   
		    String demsg = new String(cipher2.doFinal(decoder.decode(enmsg)), "UTF-8");
		
		    return demsg;
		  
		}catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BadPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	   return null;
   }
}
发布了40 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41332728/article/details/86774980