code: public static String decrypt(PrivateKey key, byte[] encodedText) {
  
      	ByteArrayOutputStream out = null;
          try {
              Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
              cipher.init(Cipher.DECRYPT_MODE, key);
              int inputLen = encodedText.length; 
              
              if(inputLen <= MAX_DECRYPT_BLOCK){
              	return new String(cipher.doFinal(encodedText),DEFAULT_CHARSET);
              }
              
              out = new ByteArrayOutputStream();  
              int offSet = 0;  
              byte[] cache;  
              int i = 0;  
              // 对数据分段解密  
              while (inputLen - offSet > 0) {  
                  if (inputLen - offSet > MAX_DECRYPT_BLOCK) {  
                      cache = cipher.doFinal(encodedText, offSet, MAX_DECRYPT_BLOCK);  
                  } else {  
                      cache = cipher.doFinal(encodedText, offSet, inputLen - offSet);  
                  }  
                  out.write(cache, 0, cache.length);  
                  i++;  
                  offSet = i * MAX_DECRYPT_BLOCK;  
              }  
              return new String(out.toByteArray(),DEFAULT_CHARSET);
          } catch (NoSuchAlgorithmException e) {  
              throw new RuntimeException("无此解密算法");  
          } catch (NoSuchPaddingException e) {  
              e.printStackTrace();  
              return null;  
          } catch (InvalidKeyException e) {  
              throw new RuntimeException("解密私钥非法,请检查");  
          } catch (IllegalBlockSizeException e) {  
              throw new RuntimeException("密文长度非法");  
          } catch (BadPaddingException e) {  
              throw new RuntimeException("密文数据已损坏");  
          }finally{
          	try {if(out != null)out.close(); } catch (Exception e2) {}
          }
      }
docs: 解密
  
  @param key
  @param encodedText
  @return