zoukankan      html  css  js  c++  java
  • 不对称加密算法

    package com.kaishengit.security;
    
    import java.security.KeyFactory;
    import java.security.KeyPair;
    import java.security.KeyPairGenerator;
    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.Cipher;
    import org.apache.commons.codec.binary.Base64;
    
    /**
     * 不对称加密帮助类
     * @author kdj
     * 创建时间:2018年4月13日
     */
    public class AsymmetricUtil {
    
        public static void main(String[] args) {
            try {
                String securityStr = "要加密的字符串!!!";
                KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
                KeyPair keyPair = keyPairGenerator.generateKeyPair();
                //公钥和私钥
                RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
                RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
                
                
                //生成秘钥的字符串
                String rsaPublicKeyStr = Base64.encodeBase64String(rsaPublicKey.getEncoded());
                String rsaPrivateKeyStr = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
                
                //------私钥加密,公钥解密
                String encodeStr = RSAEncodeForPrivate(rsaPrivateKeyStr, securityStr);
                System.out.println("私钥加密:"+encodeStr);
                System.out.println("公钥解密:"+RSADecodeForPublic(rsaPublicKeyStr, encodeStr));
                
                
                //------公钥加密,私钥解密
                encodeStr = RSAEncodeForPublic(rsaPublicKeyStr, securityStr);
                System.out.println("公钥加密:"+encodeStr);
                System.out.println("私钥解密:"+RSADecodeForPrivate(rsaPrivateKeyStr, encodeStr));
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        
        /**
         * 私钥加密
         * @param key 私钥
         * @param securityStr 要加密的字符串
         * @return
         * @throws Exception 
         */
        public static String RSAEncodeForPrivate(String key,String securityStr) throws Exception{
            byte[] rsaPrivateKeyByte = Base64.decodeBase64(key);
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKeyByte);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, privateKey);
            byte[] result = cipher.doFinal(securityStr.getBytes());
            String resultStr = Base64.encodeBase64String(result);
            return resultStr;
        }
        
        /**
         * 公钥解密
         * @param key 公钥
         * @param securityStr 加密的字符串
         * @return
         */
        public static String RSADecodeForPublic(String key,String securityStr) throws Exception{
            byte[] rsaPublicKeyByte = Base64.decodeBase64(key);
            X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKeyByte);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, publicKey);
            byte[] result = cipher.doFinal(Base64.decodeBase64(securityStr));
            String resultStr = new String(result);
            return resultStr;
        }
        
        
        
        
        
        
        
        /**
         * 公钥加密
         * @param key 公钥
         * @param securityStr 加密的字符串
         * @return
         */
        public static String RSAEncodeForPublic(String key,String securityStr) throws Exception{
            byte[] rsaPublicKeyByte = Base64.decodeBase64(key);
            X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKeyByte);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte[] result = cipher.doFinal(securityStr.getBytes());
            return Base64.encodeBase64String(result);
        }
        
        
        /**
         * 私钥解密
         * @param key 私钥
         * @param securityStr 要加密的字符串
         * @return
         * @throws Exception 
         */
        public static String RSADecodeForPrivate(String key,String securityStr) throws Exception{
            byte[] rsaPrivateKeyByte = Base64.decodeBase64(key);
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKeyByte);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] result = cipher.doFinal(Base64.decodeBase64(securityStr));
            return new String(result);
        }
        
        
    }
  • 相关阅读:
    CF293E Close Vertice
    [SCOI2016]幸运数字
    [NOI2003]逃学的小孩
    0302读后感
    1231递归下降语法分析
    1210-有穷自动机
    11.12 评论汇总
    1029语言文法
    0921 词法分析
    0909开启编译原理之路
  • 原文地址:https://www.cnblogs.com/fucktom/p/8854049.html
Copyright © 2011-2022 走看看