Module jcifs

Class NtlmPasswordAuthentication

java.lang.Object
org.codelibs.jcifs.smb1.NtlmPasswordAuthentication
All Implemented Interfaces:
Serializable, Principal

public final class NtlmPasswordAuthentication extends Object implements Principal, Serializable
This class stores and encrypts NTLM user credentials. The default credentials are retrieved from the org.codelibs.jcifs.smb1.smb1.client.domain, org.codelibs.jcifs.smb1.smb1.client.username, and org.codelibs.jcifs.smb1.smb1.client.password properties.

Read jCIFS Exceptions and NtlmAuthenticator for related information.

See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    Anonymous credentials instance with empty domain, username, and password.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Create an NtlmPasswordAuthentication object from a userinfo string.
    NtlmPasswordAuthentication(String domain, String username, byte[] challenge, byte[] ansiHash, byte[] unicodeHash)
    Create an NtlmPasswordAuthentication object with raw password hashes.
    NtlmPasswordAuthentication(String domain, String username, String password)
    Create an NtlmPasswordAuthentication object from domain, username, and password.
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    Compares two NtlmPasswordAuthentication objects for equality.
    byte[]
    getAnsiHash(byte[] challenge)
    Computes the 24 byte ANSI password hash given the 8 byte server challenge.
    Returns the domain.
    static byte[]
    getLMv2Response(byte[] responseKeyLM, byte[] serverChallenge, byte[] clientChallenge)
    Creates the LMv2 response for the supplied keys and challenges.
    static byte[]
    getLMv2Response(String domain, String user, String password, byte[] challenge, byte[] clientChallenge)
    Creates the LMv2 response for the supplied information.
    Return the domain and username in the format: domain\\username.
    static byte[]
    getNTLM2Response(byte[] nTOWFv1, byte[] serverChallenge, byte[] clientChallenge)
    Creates the NTLM2 response for the supplied information.
    static byte[]
    getNTLMResponse(String password, byte[] challenge)
    Generate the Unicode MD4 hash for the password associated with these credentials.
    static byte[]
    getNTLMv2Response(byte[] responseKeyNT, byte[] serverChallenge, byte[] clientChallenge, long nanos1601, byte[] targetInfo)
    Creates the NTLMv2 response for the supplied information.
    Returns the password in plain text or null if the raw password hashes were used to construct this NtlmPasswordAuthentication object which will be the case when NTLM HTTP Authentication is used.
    static byte[]
    getPreNTLMResponse(String password, byte[] challenge)
    Generate the ANSI DES hash for the password associated with these credentials.
    byte[]
    getSigningKey(byte[] challenge)
    Returns the signing key for SMB signing.
    byte[]
    getUnicodeHash(byte[] challenge)
    Computes the 24 byte Unicode password hash given the 8 byte server challenge.
    Returns the username.
    byte[]
    getUserSessionKey(byte[] challenge)
    Returns the effective user session key.
    int
    Return the upcased username hash code.
    static byte[]
    nTOWFv1(String password)
    Generates the NTOWFv1 hash for the given password.
    static byte[]
    nTOWFv2(String domain, String username, String password)
    Generates the NTOWFv2 hash for the given domain, username, and password.
    Return the domain and username in the format: domain\\username.

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface java.security.Principal

    implies
  • Field Details

    • ANONYMOUS

      public static final NtlmPasswordAuthentication ANONYMOUS
      Anonymous credentials instance with empty domain, username, and password.
  • Constructor Details

    • NtlmPasswordAuthentication

      public NtlmPasswordAuthentication(String userInfo)
      Create an NtlmPasswordAuthentication object from a userinfo string.
      Parameters:
      userInfo - the user information string in the format "domain;user:pass"
    • NtlmPasswordAuthentication

      public NtlmPasswordAuthentication(String domain, String username, String password)
      Create an NtlmPasswordAuthentication object from domain, username, and password.
      Parameters:
      domain - the authentication domain
      username - the username to authenticate with
      password - the password to authenticate with
    • NtlmPasswordAuthentication

      public NtlmPasswordAuthentication(String domain, String username, byte[] challenge, byte[] ansiHash, byte[] unicodeHash)
      Create an NtlmPasswordAuthentication object with raw password hashes.
      Parameters:
      domain - the authentication domain
      username - the username to authenticate with
      challenge - the server challenge bytes
      ansiHash - the ANSI password hash
      unicodeHash - the Unicode password hash
  • Method Details

    • getPreNTLMResponse

      public static byte[] getPreNTLMResponse(String password, byte[] challenge)
      Generate the ANSI DES hash for the password associated with these credentials.
      Parameters:
      password - the password to hash
      challenge - the server challenge bytes
      Returns:
      the ANSI DES hash response
    • getNTLMResponse

      public static byte[] getNTLMResponse(String password, byte[] challenge)
      Generate the Unicode MD4 hash for the password associated with these credentials.
      Parameters:
      password - the password to hash
      challenge - the server challenge bytes
      Returns:
      the Unicode MD4 hash response
    • getLMv2Response

      public static byte[] getLMv2Response(String domain, String user, String password, byte[] challenge, byte[] clientChallenge)
      Creates the LMv2 response for the supplied information.
      Parameters:
      domain - The domain in which the username exists.
      user - The username.
      password - The user's password.
      challenge - The server challenge.
      clientChallenge - The client challenge (nonce).
      Returns:
      the LMv2 response bytes
    • getNTLM2Response

      public static byte[] getNTLM2Response(byte[] nTOWFv1, byte[] serverChallenge, byte[] clientChallenge)
      Creates the NTLM2 response for the supplied information.
      Parameters:
      nTOWFv1 - the NTOWFv1 hash
      serverChallenge - the server challenge bytes
      clientChallenge - the client challenge bytes
      Returns:
      the NTLM2 response bytes
    • nTOWFv1

      public static byte[] nTOWFv1(String password)
      Generates the NTOWFv1 hash for the given password.
      Parameters:
      password - the password to hash
      Returns:
      the NTOWFv1 hash bytes
    • nTOWFv2

      public static byte[] nTOWFv2(String domain, String username, String password)
      Generates the NTOWFv2 hash for the given domain, username, and password.
      Parameters:
      domain - the authentication domain
      username - the username
      password - the password
      Returns:
      the NTOWFv2 hash bytes
    • getLMv2Response

      public static byte[] getLMv2Response(byte[] responseKeyLM, byte[] serverChallenge, byte[] clientChallenge)
      Creates the LMv2 response for the supplied keys and challenges.
      Parameters:
      responseKeyLM - the LM response key
      serverChallenge - the server challenge bytes
      clientChallenge - the client challenge bytes
      Returns:
      the LMv2 response bytes
    • getNTLMv2Response

      public static byte[] getNTLMv2Response(byte[] responseKeyNT, byte[] serverChallenge, byte[] clientChallenge, long nanos1601, byte[] targetInfo)
      Creates the NTLMv2 response for the supplied information.
      Parameters:
      responseKeyNT - the NT response key
      serverChallenge - the server challenge bytes
      clientChallenge - the client challenge bytes
      nanos1601 - the timestamp in nanoseconds since 1601
      targetInfo - the target information from the Type 2 message
      Returns:
      the NTLMv2 response bytes
    • getDomain

      public String getDomain()
      Returns the domain.
      Returns:
      the authentication domain
    • getUsername

      public String getUsername()
      Returns the username.
      Returns:
      the username
    • getPassword

      public String getPassword()
      Returns the password in plain text or null if the raw password hashes were used to construct this NtlmPasswordAuthentication object which will be the case when NTLM HTTP Authentication is used. There is no way to retrieve a users password in plain text unless it is supplied by the user at runtime.
      Returns:
      the password or null if using raw hashes
    • getName

      public String getName()
      Return the domain and username in the format: domain\\username. This is equivalent to toString().
      Specified by:
      getName in interface Principal
    • getAnsiHash

      public byte[] getAnsiHash(byte[] challenge)
      Computes the 24 byte ANSI password hash given the 8 byte server challenge.
      Parameters:
      challenge - the server challenge bytes
      Returns:
      the ANSI password hash
    • getUnicodeHash

      public byte[] getUnicodeHash(byte[] challenge)
      Computes the 24 byte Unicode password hash given the 8 byte server challenge.
      Parameters:
      challenge - the server challenge bytes
      Returns:
      the Unicode password hash
    • getSigningKey

      public byte[] getSigningKey(byte[] challenge) throws SmbException
      Returns the signing key for SMB signing.
      Parameters:
      challenge - the server challenge bytes
      Returns:
      the signing key
      Throws:
      SmbException - if an error occurs generating the signing key
    • getUserSessionKey

      public byte[] getUserSessionKey(byte[] challenge)
      Returns the effective user session key.
      Parameters:
      challenge - The server challenge.
      Returns:
      A byte[] containing the effective user session key, used in SMB MAC signing and NTLMSSP signing and sealing.
    • equals

      public boolean equals(Object obj)
      Compares two NtlmPasswordAuthentication objects for equality. Two NtlmPasswordAuthentication objects are equal if their caseless domain and username fields are equal and either both hashes are external and they are equal or both internally supplied passwords are equal. If one NtlmPasswordAuthentication object has external hashes (meaning negotiated via NTLM HTTP Authentication) and the other does not they will not be equal. This is technically not correct however the server 8 byte challage would be required to compute and compare the password hashes but that it not available with this method.
      Specified by:
      equals in interface Principal
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Return the upcased username hash code.
      Specified by:
      hashCode in interface Principal
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Return the domain and username in the format: domain\\username. This is equivalent to getName().
      Specified by:
      toString in interface Principal
      Overrides:
      toString in class Object