Re: MD5-based passwords - Mailing list pgsql-jdbc

From Bruce Momjian
Subject Re: MD5-based passwords
Date
Msg-id 200111071914.fA7JEsM19961@candle.pha.pa.us
Whole thread Raw
In response to Re: MD5-based passwords  (Jeremy Wohl <jeremyw-pgjdbc@igmus.org>)
List pgsql-jdbc
Looks good.  Can I ask for a context diff, "diff -c"?

---------------------------------------------------------------------------

> On Wed, Nov 07, 2001 at 12:27:53AM -0500, Bruce Momjian wrote:
> > > Hey folks,
> > >
> > > I don't see MD5-based password code in the JDBC CVS tree.  Is anyone
> > > working on this?
> > >
> > > I'll take a stab, if not.
> >
> > There is no one working on it.  ODBC needs it too.  It wasn't on the
> > TODO list but I just added it.
> >
> > I can assist with any questions.  See libpq for a sample implementation.
>
> OK, how about this?  Someone will have to help me with appropriate exception
> behavior and where the bytesToHex util is placed.
>
> I'm not clear on the SendInteger(5 + .. code, seen elsewhere.  Why isn't
> this (4 + ...?
>
> Index: Connection.java
> ===================================================================
> RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/Connection.java,v
> retrieving revision 1.34
> diff -r1.34 Connection.java
> 6a7
> > import java.security.*;
> 65a67
> >         private static final int AUTH_REQ_MD5 = 5;
> 183c185
> <                     // Get the password salt if there is one
> ---
> >                     // Get the crypt password salt if there is one
> 190c192,204
> <                         DriverManager.println("Salt=" + salt);
> ---
> >                         DriverManager.println("Crypt salt=" + salt);
> >                     }
> >
> >                     // Or get the md5 password salt if there is one
> >                     if (areq == AUTH_REQ_MD5)
> >                     {
> >                         byte[] rst = new byte[4];
> >                         rst[0] = (byte)pg_stream.ReceiveChar();
> >                         rst[1] = (byte)pg_stream.ReceiveChar();
> >                         rst[2] = (byte)pg_stream.ReceiveChar();
> >                         rst[3] = (byte)pg_stream.ReceiveChar();
> >                         salt = new String(rst, 0, 4);
> >                         DriverManager.println("MD5 salt=" + salt);
> 197,198c211,212
> <                         break;
> <
> ---
> >                         break;
> >
> 223a238,266
> >                     case AUTH_REQ_MD5:
> >                             try {
> >                             MessageDigest md = MessageDigest.getInstance("MD5");
> >                             byte[] temp_digest, pass_digest;
> >                             byte[] hex_digest = new byte[35];
> >
> >                             DriverManager.println("postgresql: MD5");
> >
> >                             md.update(PG_PASSWORD.getBytes());
> >                             md.update(PG_USER.getBytes());
> >                             temp_digest = md.digest();
> >
> >                             bytesToHex(temp_digest, hex_digest, 0);
> >                             md.update(hex_digest, 0, 32);
> >                             md.update(salt.getBytes());
> >                             pass_digest = md.digest();
> >
> >                             bytesToHex(pass_digest, hex_digest, 3);
> >                             hex_digest[0] = 'm'; hex_digest[1] = 'd'; hex_digest[2] = '5';
> >
> >                             pg_stream.SendInteger(5 + hex_digest.length, 4);
> >                             pg_stream.Send(hex_digest);
> >                             pg_stream.SendInteger(0, 1);
> >                             pg_stream.flush();
> >                         } catch (Exception e) {
> >                             ; // "MessageDigest failure; " + e
> >                         }
> >                         break;
> >
> 310a354,368
> >
> >         private static void bytesToHex(byte[] bytes, byte[] hex, int offset)
> >         {
> >             final char lookup[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
> >                     'a', 'b', 'c', 'd', 'e', 'f' };
> >
> >         int i, c, j, pos = offset;
> >
> >         for (i = 0; i < 16; i++) {
> >             c = bytes[i] & 0xFF; j = c >> 4;
> >             hex[pos++] = (byte) lookup[j];
> >             j = (c & 0xF);
> >             hex[pos++] = (byte) lookup[j];
> >         }
> >         }
>
> -jeremy
> _____________________________________________________________________
> jeremy wohl ..: http://igmus.org

[ Attachment, skipping... ]

>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-jdbc by date:

Previous
From: Jeremy Wohl
Date:
Subject: Re: MD5-based passwords
Next
From: Bruce Momjian
Date:
Subject: Re: MD5-based passwords