• 不对称加密算法


    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);
        }
        
        
    }
  • 相关阅读:
    python学习笔记(二)
    python学习笔记(四)
    首个python程序,一个猜数字的小游戏 ^0^
    python生成随机数
    python生成随机数
    python学习笔记(四)
    我的书《编写高质量代码—Web前端开发修炼之道》面市了,请大家多多支持
    python学习笔记(三)
    EasyNVR纯H5摄像机直播解决方案前端解析之:RTSP安防监控实时直播的网页H5自动播放方案
    基于EasyNVR实现RTSP_Onvif监控摄像头Web无插件化直播监控
  • 原文地址:https://www.cnblogs.com/fucktom/p/8854049.html
Copyright © 2020-2023  润新知