Class PDFPassword

java.lang.Object
com.sun.pdfview.decrypt.PDFPassword

public class PDFPassword extends Object

Identifies a PDF Password, expressible either as a string or a byte sequence.

In revisions up to version 1.e Expansion 3, the mapping between a string and the bytes corresponding to the password was poorly specified, meaning that the safest manner in which to specify a password was via a byte array. With 1.7 expansion 3, a still slightly problematic mapping was given for the Standard encryption algorithms through to version 4, and a very well specified mapping for the new version 5 encryption.

So, for passwords specified in versions up to and including 4, a byte[] representation is the most accurate, but not necessarily the most convenient manner to provide passwords. For version 5, allowing passwords to be specified as Strings will be the preferred mechanism. Rather than specify two interfaces whenever a password can be provided - one for byte[] and one for String - we express the password as a class. This class can also offer a best guess at a String representation for a password for encryption versions up to and including 4.

  • Field Details

    • EMPTY_PASSWORD

      public static final PDFPassword EMPTY_PASSWORD
      The empty password
    • passwordBytes

      private byte[] passwordBytes
      the password in bytes, if specified as such
    • passwordString

      private String passwordString
      the passwird as a string, if specified as such
    • PASSWORD_BYTE_GENERATORS

      private static final PDFPassword.PasswordByteGenerator[] PASSWORD_BYTE_GENERATORS
      An array of password byte generators that attempts to enumerate the possible strategies that an encrypting application might take to convert a string to an array of bytes
  • Constructor Details

    • PDFPassword

      public PDFPassword(byte[] passwordBytes)
      Construct a byte-based password
      Parameters:
      passwordBytes - the password bytes
    • PDFPassword

      public PDFPassword(String passwordString)
      Construct a string-based password
      Parameters:
      passwordString - the password
  • Method Details

    • nonNullPassword

      public static PDFPassword nonNullPassword(PDFPassword password)
      Ensure a non-null PDFPassword by substituting the empty password for a null password
      Parameters:
      password - the password, may be null
      Returns:
      a non-null password
    • getPasswordBytes

      List<byte[]> getPasswordBytes(boolean unicodeConversion)
      Get the password bytes.
      Parameters:
      unicodeConversion - whether the specific conversion from a unicode String, as present for version 5 encryption, should be used
      Returns:
      a list of possible password bytes
    • generatePossiblePasswordBytes

      private static List<byte[]> generatePossiblePasswordBytes(String passwordString)
      Generate some possible byte representations of a string password
      Parameters:
      passwordString - the string password
      Returns:
      a list of unique possible byte representations
    • isAlphaNum7BitString

      private boolean isAlphaNum7BitString(String string)