Java加密/解密之非对称加密算法

比较常见的是RSA(适用于对少量数据加密)和DSA(一般用于数字签名中)。

 

Java使用RSA加密解密:

package com.security.example.example4;

 

import java.security.InvalidKeyException;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.NoSuchAlgorithmException;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

 

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.NoSuchPaddingException;

 

public class RSA {

         // 完成加密/解密工作

         private Cipher cipher = null;

         // 公钥

         private RSAPublicKey rsaPublicKey = null;

         // 私钥

         private RSAPrivateKey rsaPrivateKey = null;

        

         public RSA() {

                   try {

                            cipher = Cipher.getInstance("rsa");

                            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");

                            KeyPair keypair = keyPairGen.genKeyPair();

                            rsaPrivateKey = (RSAPrivateKey) keypair.getPrivate();

                            rsaPublicKey = (RSAPublicKey) keypair.getPublic();

                   } catch (NoSuchAlgorithmException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                   } catch (NoSuchPaddingException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                   }

         }

        

         /**

          * 使用私钥加密。

          * @param msg:要加密的消息。

          * @return加密后的密文

          */

         public byte[] encryp(String msg) {

                   try {

                            cipher.init(Cipher.ENCRYPT_MODE, rsaPrivateKey);

                            byte[] encrypMsg = cipher.doFinal(msg.getBytes());

                            return encrypMsg;

                   } catch (InvalidKeyException 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;

         }

        

         /**

          * 使用公钥解密。

          * @param msg:密文

          * @return解密后的原文

          */

         public byte[] decryp(byte[] msg) {

                   try {

                            cipher.init(Cipher.DECRYPT_MODE, rsaPublicKey);

                            byte[] decrypMsg = cipher.doFinal(msg);

                            return decrypMsg;

                   } catch (InvalidKeyException 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;

         }

         /**

          * @param args

          */

         public static void main(String[] args) {

                   String msg = "java安全编程——RSA";

                   System.out.println("原文是:" + msg);

                   RSA rsa = new RSA();

                   byte[] enMsg = rsa.encryp(msg);

                   System.out.println("加密后是:" + new String(enMsg));

                   byte[] deMsg = rsa.decryp(enMsg);

                   System.out.println("解密后是:"  + new String(deMsg));

                  

         }

 

}

 

输出:

原文是:java安全编程——RSA

加密后是:_c_3乿e3岥赾悤_�_Q敊怦i�_f�儠B橱狎�_駸1=脖X揖�_p�!\x7BJ�_�-nZ臑�摁_UB厕瓀犆}~S_宜腒馾�=_

解密后是:java安全编程——RSA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值