• 工资系统解决办法


    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();
            }
    }}
  • 相关阅读:
    react.js 你应知道的9件事
    table的border-collapse属性与border-spacing属性
    深入理解 CSS变形 transform(3d)
    $ 的绑定事件
    保留两位小数
    数据库日期格式化
    javaScript对两个数组进行去重
    js中的原型链__proto__其实超简单!!
    JSON.parse()和JSON.stringify()应用理解
    Java Web 重归
  • 原文地址:https://www.cnblogs.com/littlehb/p/5938832.html
Copyright © 2020-2023  润新知