您的位置:首页 > 编程语言 > Java开发

java使用RSA算法加密解密

2016-09-08 18:36 267 查看
import java.awt.AlphaComposite;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.RenderingHints;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.security.Key;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.SecureRandom;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

import javax.crypto.Cipher;

public class RSAUtils{

 public static String makekeyfile(String pubkeyfile, String prikeyfile) {  

    String result = "生成公私钥文件失败";

    try{
       // KeyPairGenerator用于生成公私钥对,基于RSA算法生成对象  
       KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");  
       // 初始化密钥对生成器,密钥大小为1024位  
       gen.initialize(1024);  

//        //生成强随机数

//        SecureRandom random = new SecureRandom();

//        gen.initialize(1024,random);
       
       // 生成一个密钥对,保存在pair中  
       KeyPair pair = gen.generateKeyPair();
       // 得到私钥  
       RSAPrivateKey priKey = (RSAPrivateKey) pair.getPrivate();  
 
       // 得到公钥  
       RSAPublicKey pubKey = (RSAPublicKey) pair.getPublic();  

       // 生成私钥文件
       ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(prikeyfile));  
       os.writeObject(priKey);  
       os.flush();  
       os.close();  
       //生成公钥文件
       os = new ObjectOutputStream(new FileOutputStream(pubkeyfile));  
       os.writeObject(pubKey);  
       os.flush();  
       os.close();  
       result = "生成公钥文件【"+pubkeyfile+"】生成私钥文件【"+prikeyfile+"】";
   }catch(Exception e){
    e.printStackTrace();
   }

    return result;

    }

    

    public static void main(String[] args) {  

    try{
       String pubfile = "F:/images/pub.key";  
       String prifile = "F:/images/pri.key";  
       String result = null;
       //result = makekeyfile(pubfile, prifile); 
       result = markPuPra(pubfile, prifile);
       System.out.println(result);

    }catch(Exception e){

    e.printStackTrace();

    }

    } 

    

    public static String markPuPra(String pubfile,String prifile){

    String results = "加解密出错";

    try{
       ObjectInputStream os = new ObjectInputStream(new FileInputStream(pubfile));  
       RSAPublicKey pubkey = (RSAPublicKey) os.readObject();  
       os.close();  

       os = new ObjectInputStream(new FileInputStream(prifile));  
       RSAPrivateKey prikey = (RSAPrivateKey) os.readObject();  
       os.close();  
 
       String utf = "UTF-8";  
 
       String msg = "##中国%%的)人@+_";  
       // 使用公钥加密私钥解密  
       System.out.println("原文: " + msg);  
       byte[] puk = handleData(pubkey, msg.getBytes(utf), 1);  
       System.out.println("加密后文件数据: " + new String(puk, utf));  
       byte[] dpuk = handleData(prikey, puk, 0);  
       System.out.println("解密后文件数据: " + new String(dpuk, utf));  
 
       msg = "jd#我0们的¥人+=#新";  
       // 使用私钥加密公钥解密  
       System.out.println("原文: " + msg);  
       byte[] prk = handleData(prikey, msg.getBytes(utf), 1);  
       System.out.println("加密后文件数据: " + new String(prk, utf));  
       byte[] dprk = handleData(pubkey, prk, 0);  
       System.out.println("解密后文件数据: " + new String(dprk, utf));  
       results = "加解密完成";

    }catch(Exception e){

    e.printStackTrace();

    }

    return results;

    }

    /** 

     *  

     * @param k 

     * @param data 

     * @param encrypt 1 加密 0解密 

     * @return 

     * @throws Exception 

     */  

    public static byte[] handleData(Key key, byte[] data, int type) throws Exception {  

  

        if (key != null) {  

            Cipher ci = Cipher.getInstance("RSA"); 

            if (type == 1) {  

                ci.init(Cipher.ENCRYPT_MODE, key);  

                byte[] res = ci.doFinal(data);  

                return res;  

            }

            if (type == 0) {  

                ci.init(Cipher.DECRYPT_MODE, key);  

                byte[] res = ci.doFinal(data);  

                return res;  

            }

        }  

        return null;  

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: