天行健,君子以自强不息

BlogJava 首页 新随笔 联系 聚合 管理
  12 Posts :: 0 Stories :: 2 Comments :: 0 Trackbacks

 

package com.yill;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

import sun.security.rsa.RSAKeyPairGenerator;

public class YillRSA
{

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args)
    
{
        generateKeyPair();
        
byte[] info = "http://www.blogjava.net/yill/".getBytes();
        System.out.println(
"Original info is " + new String(info));
        System.out.println(
"encrypted info is " + new String(encode(info)));
        System.out.println(
"Decrypted info is "
                
+ new String(decode(encode(info))));
    }


    
public static void generateKeyPair()
    
{
        RSAKeyPairGenerator kg 
= new RSAKeyPairGenerator();
        kg.initialize(
1024new SecureRandom());

        KeyPair keyPair 
= kg.generateKeyPair();

        PrivateKey privateKey 
= keyPair.getPrivate();
        writeKeyToDisk(
"C:\\privateKey.dat", privateKey);

        PublicKey publicKey 
= keyPair.getPublic();
        writeKeyToDisk(
"C:\\publicKey.dat", publicKey);

    }


    
public static byte[] encode(byte[] info)
    
{
        PrivateKey privateKey 
= (PrivateKey) readKeyFromDisk("C:\\privateKey.dat");

        
try
        
{
            Cipher cipher 
= Cipher.getInstance("RSA");

            cipher.init(Cipher.ENCRYPT_MODE, privateKey, 
new SecureRandom());

            
return cipher.doFinal(info);
        }

        
catch (NoSuchAlgorithmException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        
catch (NoSuchPaddingException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        
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 new byte[0];
    }


    
public static byte[] decode(byte[] info)
    
{
        PublicKey publicKey 
= (PublicKey) readKeyFromDisk("C:\\publicKey.dat");

        
try
        
{
            Cipher cipher 
= Cipher.getInstance("RSA");

            cipher.init(Cipher.DECRYPT_MODE, publicKey, 
new SecureRandom());

            
return cipher.doFinal(info);
        }

        
catch (NoSuchAlgorithmException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        
catch (NoSuchPaddingException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        
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 new byte[0];
    }


    
private static void writeKeyToDisk(String file, Key key)
    
{
        
try
        
{
            ObjectOutputStream out 
= new ObjectOutputStream(
                    
new FileOutputStream(file));

            out.writeObject(key);

        }

        
catch (FileNotFoundException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        
catch (IOException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


    
private static Key readKeyFromDisk(String file)
    
{
        
try
        
{
            ObjectInputStream in 
= new ObjectInputStream(new FileInputStream(
                    file));
            
return (Key) in.readObject();
        }

        
catch (FileNotFoundException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        
catch (IOException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        
catch (ClassNotFoundException e)
        
{
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        
return null;
    }


}

posted on 2008-03-19 00:08 yill 阅读(831) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: