• RSA java.security.InvalidKeyException: IOException : Short read of DER length


    /**
         * 私钥解密
         *
         * @param privateKeyText
         * @param text
         * @return
         * @throws Exception
         */
        public static String decryptByPrivateKey(String privateKeyText, String text) throws Exception {
            // 不加上这行java.security.Security.addProvider ,就会报java.security.InvalidKeyException: IOException : Short read of DER length 错误
        	java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText));
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] result = cipher.doFinal(Base64.decodeBase64(text));
            return new String(result);
        }
    
    

    RSA 工具类

    //生成秘钥对
        public static KeyPair getKeyPair() throws Exception {
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            keyPairGenerator.initialize(1024);
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            return keyPair;
        }
    
        //获取公钥(Base64编码)
        public static String getPublicKey(KeyPair keyPair){
            PublicKey publicKey = keyPair.getPublic();
            byte[] bytes = publicKey.getEncoded();
            return byte2Base64(bytes);
        }
    
        //获取私钥(Base64编码)
        public static String getPrivateKey(KeyPair keyPair){
            PrivateKey privateKey = keyPair.getPrivate();
            byte[] bytes = privateKey.getEncoded();
            return byte2Base64(bytes);
        }
    
        //将Base64编码后的公钥转换成PublicKey对象
        public static PublicKey string2PublicKey() throws Exception{
            ApolloProperties apollo = SpringUtils.getBean(ApolloProperties.class);
            byte[] keyBytes = base642Byte(PUBLIC_KEY);
    //        byte[] keyBytes = base642Byte(apollo.getCasPublicKey());
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey = keyFactory.generatePublic(keySpec);
            return publicKey;
        }
    
        /**
         *
         * @param text
         * @return
         * @throws Exception
         */
        public static String decryptByPrivateKey( String text) throws Exception {
            java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(PRIVATE_KEY));
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] result = cipher.doFinal(Base64.decodeBase64(text));
            return new String(result);
        }
    
        //将Base64编码后的私钥转换成PrivateKey对象
        public static PrivateKey string2PrivateKey(String priStr) throws Exception{
            byte[] keyBytes = base642Byte(priStr);
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
            return privateKey;
        }
    
        //公钥加密
        public static byte[] publicEncrypt(byte[] content, PublicKey publicKey) throws Exception{
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte[] bytes = cipher.doFinal(content);
            return bytes;
        }
    
        //公钥加密
        public static byte[] publicEncrypt(String content, PublicKey publicKey) throws Exception{
            return publicEncrypt(content.getBytes(),publicKey);
        }
    
        //公钥加密
        public static byte[] publicEncrypt(String content) throws Exception{
            PublicKey publicKey = string2PublicKey();
            return publicEncrypt(content.getBytes(),publicKey);
        }
    
        public static String publicEncryptToString(String content){
    
            try {
                PublicKey publicKey = string2PublicKey();
                return byte2Base64( publicEncrypt(content.getBytes(),publicKey));
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        //私钥解密
        public static byte[] privateDecrypt(byte[] content, PrivateKey privateKey) throws Exception{
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] bytes = cipher.doFinal(content);
            return bytes;
        }
    
        public static byte[] privateDecrypt(String content, PrivateKey privateKey) throws Exception{
            return privateDecrypt(content.getBytes(),privateKey);
        }
    
        //字节数组转Base64编码
        public static String byte2Base64(byte[] bytes){
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(bytes);
        }
    
        //Base64编码转字节数组
        public static byte[] base642Byte(String base64Key) throws IOException{
            BASE64Decoder decoder = new BASE64Decoder();
            return decoder.decodeBuffer(base64Key);
        }
    
  • 相关阅读:
    DFS
    离散化
    前缀和&差分
    数组运用_1-15 选择题
    数组运用_1-13 选择题
    数组运用_1-11 选择题
    数组运用_1-9 选择题
    数组运用_1-4 编程练习
    数组初始_2-22编程练习
    poj 3669 bfs(这道题隐藏着一个大坑)
  • 原文地址:https://www.cnblogs.com/wanthune/p/14106116.html
Copyright © 2020-2023  润新知