云代码 发表于 2013-03-11 19:46

一个RSA加密算法

package com;

import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import java.util.HashMap;
import java.util.Map;

import javax.crypto.Cipher;

public class RSACoder {
        //算法
        public static String Key_ALGORITHM="RSA";
        //私钥
        public static String Private_Key="RSAPrivateKey";
        //公钥
        public static String Public_Key="RSAPublicKey";
        //密钥长度
        public static int Key_Size=512;
        public static Map<String,Object> initKey() throws Exception{
                //实例化密钥生成器
                KeyPairGenerator keypairgenerator=KeyPairGenerator.getInstance(Key_ALGORITHM);
                //初始化
                keypairgenerator.initialize(Key_Size);
                //获得密钥对
                KeyPair keypair=keypairgenerator.generateKeyPair();
                //密钥
                RSAPrivateKey pritekey=(RSAPrivateKey)keypair.getPrivate();
                //公钥
                RSAPublicKey pubkey=(RSAPublicKey)keypair.getPublic();
                Map<String,Object> keymap=new HashMap<String,Object>(2);
                keymap.put(Private_Key, pritekey);
                keymap.put(Public_Key, pubkey);
                return keymap;       
        }
        //获得密钥
        public static byte[] getPrivateKey(Map<String,Object>keymap){
      Key pritekey=(Key)keymap.get(Private_Key);
      return pritekey.getEncoded();
        }
        //获得公钥
        public static byte[] getPublicKey(Map<String,Object>keymap){
               Key pubkey=(Key)keymap.get(Public_Key);
               return pubkey.getEncoded();
        }
        //私钥加密
        public static byte[] encryptByPrivateKey(byte[] key,byte[] data) throws Exception{
                //实例化密钥材料
                PKCS8EncodedKeySpec pcs8spec=new PKCS8EncodedKeySpec(key);
                //实例化密钥工厂
                KeyFactory keyfactory=KeyFactory.getInstance(Key_ALGORITHM);
                //生成私钥
                PrivateKey pritekey=keyfactory.generatePrivate(pcs8spec);
                //私钥加密
                Cipher cipher=Cipher.getInstance(pritekey.getAlgorithm());
                cipher.init(Cipher.ENCRYPT_MODE,pritekey);
                return cipher.doFinal(data);
        }
        //公钥解密
        public static byte[] decryptByPublicKey(byte[] key,byte[] data) throws Exception{
                //实例化公钥材料
                X509EncodedKeySpec x509spec=new X509EncodedKeySpec(key);
                //实例化密钥工厂
                KeyFactory keyfactory=KeyFactory.getInstance(Key_ALGORITHM);
                //获得公钥
                PublicKey pubkey=keyfactory.generatePublic(x509spec);
                //对数据进行解密
                Cipher cipher=Cipher.getInstance(Key_ALGORITHM);
                cipher.init(Cipher.DECRYPT_MODE, pubkey);
                return cipher.doFinal(data);
        }
       

}
转自:http://yuncode.net/code/c_5136f1783044357

页: [1]
查看完整版本: 一个RSA加密算法