码迷,mamicode.com
首页 > 其他好文 > 详细

工资系统解决办法

时间:2016-10-08 16:51:54      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

import java.security.InvalidKeyException;
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 javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

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

public class test {
     public static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding";
     public static final String PLAIN_TEXT = "张三丰,您的2016年10月份工资金额为:8000元。";
     public static final String KEY_ALGORITHM = "RSA";
     /** RSA密钥长度必须是64的倍数,在512~65536之间。默认是1024 */
     public static final int KEY_SIZE = 2048;
     public static final String PUBLIC_KEY = "publicKey";
     public static final String PRIVATE_KEY = "privateKey";
        
    public static void main(String[] args) throws Exception 
    {
        createKeyPairs();
    }
    public static void createKeyPairs() throws Exception 
    {  
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        keyPairGenerator.initialize(KEY_SIZE);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
        //字符串化
        byte[] pk = publicKey.getEncoded();  
        byte[] privk = privateKey.getEncoded();  
        String strpk = new String(Base64.encodeBase64(pk));  
        String strprivk = new String(Base64.encodeBase64(privk));  
      
        System.out.println("公钥:" + strpk);  
        System.out.println("私钥:" + strprivk);  
      
        //从字符串还原到对象
        X509EncodedKeySpec pubX509 = new X509EncodedKeySpec(Base64.decodeBase64(strpk.getBytes()));  
        PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decodeBase64(strprivk.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));
    }  
    
    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 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;

    }
}

jar包下载

工资系统解决办法

标签:

原文地址:http://www.cnblogs.com/littlehb/p/5938832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!