工资系统解决办法

import java.security.InvalidKeyException;
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.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;

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

import org.apache.commons.codec.binary.Base64;

public class CreateSecrteKey {
   
   
    public static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding";
    
    public static final String KEY_ALGORITHM = "RSA";
    //公钥
    private static final String PUBLIC_KEY = "DsideaL4r5t6y7u";
    //私钥
    private static final String PRIVATE_KEY = "Aly_PrivateKey";
    
    
    //获得公钥
    public static String getPublicKey(Map<String, Object> keyMap) throws Exception 
    {
        //获得map中的公钥对象 转为key对象
        Key key = (Key) keyMap.get(PUBLIC_KEY);
        //编码返回字符串
        return Base64.encodeBase64String(key.getEncoded());
    }

    //获得私钥
    public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {
        //获得map中的私钥对象 转为key对象
        Key key = (Key) keyMap.get(PRIVATE_KEY);
        //编码返回字符串
        return Base64.encodeBase64String(key.getEncoded());
    }
    
    
    //map对象中存放公私钥
    public static Map<String, Object> initKey() throws Exception {
        //获得对象 KeyPairGenerator 参数 RSA 1024个字节
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        keyPairGen.initialize(1024);
        //通过对象 KeyPairGenerator 获取对象KeyPair
        KeyPair keyPair = keyPairGen.generateKeyPair();
        
        //通过对象 KeyPair 获取RSA公私钥对象RSAPublicKey RSAPrivateKey
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
        //公私钥对象存入map中
        Map<String, Object> keyMap = new HashMap<String, Object>(2);
        keyMap.put(PUBLIC_KEY, publicKey);
        keyMap.put(PRIVATE_KEY, privateKey);
        return keyMap;
    }
    
    public static String RSADecode(PrivateKey key, byte[] encodedText) {

        try {
            Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, key);
            return new String(cipher.doFinal(encodedText));
        } catch (NoSuchAlgorithmException | NoSuchPaddingException
                | InvalidKeyException | IllegalBlockSizeException
                | BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static byte[] RSAEncode(PublicKey key, byte[] plainText) {

        try {
            Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
            cipher.init(Cipher.ENCRYPT_MODE, key);
            return cipher.doFinal(plainText);
        } catch (NoSuchAlgorithmException | NoSuchPaddingException
                | InvalidKeyException | IllegalBlockSizeException
                | BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        Map<String, Object> keyMap;
        try {
            keyMap = initKey();
            String publicKey = getPublicKey(keyMap);
            System.out.println("公钥:"+publicKey);
            
            String privateKey = getPrivateKey(keyMap);
            System.out.println("私钥:"+privateKey);
            
            System.out.println("=====================================================");
            
            String PLAIN_TEXT = "张三丰,您的2016年10月份工资金额为:8000元。";
                        
            //从字符串还原到对象
            X509EncodedKeySpec pubX509 = new X509EncodedKeySpec(Base64.decodeBase64(publicKey.getBytes()));  
            PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey.getBytes()));  
            KeyFactory keyf =  KeyFactory.getInstance(KEY_ALGORITHM);
            PublicKey pubkey2 = keyf.generatePublic(pubX509);  
            PrivateKey privkey2 = keyf.generatePrivate(priPKCS8); 
            
            //公钥加密
            byte[] encodedText = RSAEncode(pubkey2, PLAIN_TEXT.getBytes());
            System.out.println("公钥加密后的密文: " + Base64.encodeBase64String(encodedText));
            
            //私钥解密
            System.out.println("私钥解密后的明文: " + RSADecode(privkey2, encodedText));
            
        } catch (Exception e) {
            e.printStackTrace();
        }
}}

 

posted @ 2016-10-08 15:11  糖豆爸爸  阅读(284)  评论(0编辑  收藏  举报
Live2D