zoukankan      html  css  js  c++  java
  • java 中使用RSA非对称性加密解密

    需要引入的jar包:bcprov-jdk15on-161.jar

    下载地址:https://www.bouncycastle.org/latest_releases.html

     //公钥加密
        public static String encrypt(String content, PublicKey publicKey) {
            try{
                Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
                Cipher cipher = Cipher.getInstance("RSA/NONE/OAEPWITHSHA256AndMGF1Padding","BC");
    //            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");//java默认"RSA"="RSA/ECB/PKCS1Padding"
                cipher.init(Cipher.ENCRYPT_MODE, publicKey);
                byte[] output = cipher.doFinal(content.getBytes());
                BASE64Encoder encoder = new BASE64Encoder();
                return encoder.encode(output);
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
        //私钥解密
        public static String decrypt(String content, PrivateKey privateKey) {
            try {
    //            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
                Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
                Cipher cipher = Cipher.getInstance("RSA/NONE/OAEPWITHSHA256AndMGF1Padding","BC");
                cipher.init(Cipher.DECRYPT_MODE, privateKey);
                BASE64Decoder decoder = new BASE64Decoder();
                byte[] decodeBuffer = decoder.decodeBuffer(content);
                byte [] b = cipher.doFinal(decodeBuffer);
                return new String(b);
            } catch (Exception e){
                e.printStackTrace();
                return null;
            }
        }

     测试

    private static String data2 ="g7ZcUMRAIAsVDwrAFi5F4uia6KhW3gCbyfKLDxLWiBTbHuJpfPA3iSLz7RYs9/6tMO6Vq8kG4nJs9+OMyK0psK/iCLA8PsEVRczsNNJ9OS10eZ/MbKoCpRRCC89aHf59JQy757g1wquq5yCXbnJRPd7lQYobJnxp1ZeBWB9NwruISt075/6sS8Kram2IXFLP5LypFNWRCPB9HVKz3HFlLqRH0lWfIbPO1VDYsK6ooRvRbr4MnRAACs+p92VeAg6NRcqWvP4o7f/wY3DcBYpXLVfxSQjuRG0t3t61Agc81COPaelk1f2SShtmsX8MyAZWdZpTqnTwIVRiRIXjl8PHXw==";

    public
    static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, IOException { try { String ss = "TKG-Jqs1g_O_4D37fFkOv9NGBqtPXTo-zc7b1VFf-OY"; PublicKey publicKey4 = getPublicKey(yourPublicKey); String encrypt = encrypt(ss, publicKey4); System.out.println(encrypt); PrivateKey privateKey4 = getPrivateKey(your_PRIVATE_KEY);
    String decrypt
    = decrypt(data2, privateKey4); System.out.println(decrypt); } catch (Exception e) { e.printStackTrace(); } }
        /**
         * String转公钥PublicKey
         * @param key
         * @return
         * @throws Exception
         */
        public static PublicKey getPublicKey(String key) throws Exception {
            byte[] keyBytes;
            keyBytes = (new BASE64Decoder()).decodeBuffer(key);
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey = keyFactory.generatePublic(keySpec);
            return publicKey;
        }
    
        /**
         * String转私钥PrivateKey
         * @param key
         * @return
         * @throws Exception
         */
        public static PrivateKey getPrivateKey(String key) throws Exception {
            byte[] keyBytes;
            keyBytes = (new BASE64Decoder()).decodeBuffer(key);
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
            return privateKey;
        }
  • 相关阅读:
    Spring基础知识点总结
    秒懂设计模式--代理模式(proxy)
    秒懂设计模式--工厂模式
    秒懂设计模式--适配器模式
    秒懂设计模式--装饰者模式
    秒懂设计模式--观察者模式
    单例模式的几种实现
    springboot2.0+spring cloud+eureka搭建微服务步骤
    字符串排序算法
    bitbucket的简单使用
  • 原文地址:https://www.cnblogs.com/hoonick/p/10643130.html
Copyright © 2011-2022 走看看