Esempio n. 1
0
  /**
   * 解密 由于RSA一次只能加密128个字节(加密后也是128个字节),所以将密文按128个字节分割,分块解密,最后将解密后的字节流连接起来。 (non-Javadoc)
   *
   * @see com.alipay.api.security.Encrypt#decrypt(java.lang.String, java.lang.String,
   *     java.lang.String, com.alipay.api.enums.EncryptStyleEnum)
   */
  public String decrypt(String content, String key) throws Exception {

    PrivateKey prikey =
        KeyReader.getPrivateKeyFromPKCS8(ALGORITHM, new ByteArrayInputStream(key.getBytes()));

    Cipher cipher = Cipher.getInstance(CIPHER_NAME);
    cipher.init(Cipher.DECRYPT_MODE, prikey);

    InputStream ins = new ByteArrayInputStream(Base64.decodeBase64(content.getBytes()));
    ByteArrayOutputStream writer = new ByteArrayOutputStream();

    byte[] buf = new byte[128];
    int bufl;

    while ((bufl = ins.read(buf)) != -1) {
      byte[] block = null;

      if (buf.length == bufl) {
        block = buf;
      } else {
        block = new byte[bufl];
        for (int i = 0; i < bufl; i++) {
          block[i] = buf[i];
        }
      }

      writer.write(cipher.doFinal(block));
    }

    return new String(writer.toByteArray(), "utf-8");
  }