Package net.sourceforge.jtds.jdbc
Class NtlmAuth
- java.lang.Object
-
- net.sourceforge.jtds.jdbc.NtlmAuth
-
public class NtlmAuth extends java.lang.ObjectThis class calculates the two "responses" to the nonce supplied by the server as a part of NTLM authentication. Much gratitude to the authors of this page, esp. for NTLMv2 info: http://davenport.sourceforge.net/ntlm.html- Version:
- $Id: NtlmAuth.java,v 1.7 2006-06-23 18:00:56 matt_brinkley Exp $
- Author:
- Matt Brinkley
-
-
Constructor Summary
Constructors Constructor Description NtlmAuth()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static byte[]answerLmChallenge(java.lang.String pwd, byte[] nonce)static byte[]answerLmv2Challenge(java.lang.String domain, java.lang.String user, java.lang.String password, byte[] nonce, byte[] clientNonce)static byte[]answerNtChallenge(java.lang.String password, byte[] nonce)static byte[]answerNtlmv2Challenge(java.lang.String domain, java.lang.String user, java.lang.String password, byte[] nonce, byte[] targetInfo, byte[] clientNonce)static byte[]answerNtlmv2Challenge(java.lang.String domain, java.lang.String user, java.lang.String password, byte[] nonce, byte[] targetInfo, byte[] clientNonce, byte[] timestamp)static byte[]answerNtlmv2Challenge(java.lang.String domain, java.lang.String user, java.lang.String password, byte[] nonce, byte[] targetInfo, byte[] clientNonce, long now)private static byte[]convertPassword(java.lang.String password)Used by answerNtlmChallenge.private static byte[]createBlob(byte[] targetInformation, byte[] clientChallenge, byte[] timestamp)Creates the NTLMv2 blob from the given target information block and client challenge.static byte[]createTimestamp(long time)Creates a timestamp in the format used in NTLMv2 responses.private static byte[]encryptNonce(byte[] key, byte[] nonce)private static byte[]hmacMD5(byte[] data, byte[] key)Calculates the HMAC-MD5 hash of the given data using the specified hashing key.private static byte[]lmv2Response(byte[] hash, byte[] clientData, byte[] challenge)Creates the LMv2 Response from the given hash, client data, and Type 2 challenge.private static byte[]makeDESkey(byte[] buf, int off)Turns a 7-byte DES key into an 8-byte one by adding parity bits.private static byte[]md5(byte[] data)private static byte[]ntHash(java.lang.String password)Creates the md4 hash of the unicode password.private static byte[]ntv2Hash(java.lang.String domain, java.lang.String user, java.lang.String password)
-
-
-
Method Detail
-
answerNtChallenge
public static byte[] answerNtChallenge(java.lang.String password, byte[] nonce) throws java.io.UnsupportedEncodingException- Throws:
java.io.UnsupportedEncodingException
-
answerLmChallenge
public static byte[] answerLmChallenge(java.lang.String pwd, byte[] nonce) throws java.io.UnsupportedEncodingException- Throws:
java.io.UnsupportedEncodingException
-
answerNtlmv2Challenge
public static byte[] answerNtlmv2Challenge(java.lang.String domain, java.lang.String user, java.lang.String password, byte[] nonce, byte[] targetInfo, byte[] clientNonce) throws java.io.UnsupportedEncodingException- Throws:
java.io.UnsupportedEncodingException
-
answerNtlmv2Challenge
public static byte[] answerNtlmv2Challenge(java.lang.String domain, java.lang.String user, java.lang.String password, byte[] nonce, byte[] targetInfo, byte[] clientNonce, byte[] timestamp) throws java.io.UnsupportedEncodingException- Throws:
java.io.UnsupportedEncodingException
-
answerNtlmv2Challenge
public static byte[] answerNtlmv2Challenge(java.lang.String domain, java.lang.String user, java.lang.String password, byte[] nonce, byte[] targetInfo, byte[] clientNonce, long now) throws java.io.UnsupportedEncodingException- Throws:
java.io.UnsupportedEncodingException
-
answerLmv2Challenge
public static byte[] answerLmv2Challenge(java.lang.String domain, java.lang.String user, java.lang.String password, byte[] nonce, byte[] clientNonce) throws java.io.UnsupportedEncodingException- Throws:
java.io.UnsupportedEncodingException
-
ntv2Hash
private static byte[] ntv2Hash(java.lang.String domain, java.lang.String user, java.lang.String password) throws java.io.UnsupportedEncodingException- Throws:
java.io.UnsupportedEncodingException
-
lmv2Response
private static byte[] lmv2Response(byte[] hash, byte[] clientData, byte[] challenge)Creates the LMv2 Response from the given hash, client data, and Type 2 challenge.- Parameters:
hash- The NTLMv2 Hash.clientData- The client data (blob or client challenge).challenge- The server challenge from the Type 2 message.- Returns:
- The response (either NTLMv2 or LMv2, depending on the client data).
-
hmacMD5
private static byte[] hmacMD5(byte[] data, byte[] key)Calculates the HMAC-MD5 hash of the given data using the specified hashing key.- Parameters:
data- The data for which the hash will be calculated.key- The hashing key.- Returns:
- The HMAC-MD5 hash of the given data.
-
md5
private static byte[] md5(byte[] data)
-
createTimestamp
public static byte[] createTimestamp(long time)
Creates a timestamp in the format used in NTLMv2 responses. Public so it could be unit tested.- Parameters:
time- current time, as returned from System.currentTimeMillis- Returns:
- little-endian byte array of number of tenths of microseconds since Jan 1, 1601
-
createBlob
private static byte[] createBlob(byte[] targetInformation, byte[] clientChallenge, byte[] timestamp)Creates the NTLMv2 blob from the given target information block and client challenge.- Parameters:
targetInformation- The target information block from the Type 2 message.clientChallenge- The random 8-byte client challenge.- Returns:
- The blob, used in the calculation of the NTLMv2 Response.
-
encryptNonce
private static byte[] encryptNonce(byte[] key, byte[] nonce)
-
ntHash
private static byte[] ntHash(java.lang.String password) throws java.io.UnsupportedEncodingExceptionCreates the md4 hash of the unicode password. This is used as the DES key when encrypting the nonce for NTLM challenge-response- Throws:
java.io.UnsupportedEncodingException
-
convertPassword
private static byte[] convertPassword(java.lang.String password) throws java.io.UnsupportedEncodingExceptionUsed by answerNtlmChallenge. We need the password converted to caps, narrowed and padded/truncated to 14 chars...- Throws:
java.io.UnsupportedEncodingException
-
makeDESkey
private static byte[] makeDESkey(byte[] buf, int off)Turns a 7-byte DES key into an 8-byte one by adding parity bits. All implementations of DES seem to want an 8-byte key.
-
-