I solved the last problem passing to tomcat 5.5.16 . At the end everything work as i desired (well i didn't do many tests so that's what I hope). Thanks your help and your patience
Alessandro On 3/24/06, Alessandro Colantoni <[EMAIL PROTECTED]> wrote: > > Hi! > One day after i understood what you explained me. > HexUtils.convert just do an hex representation in a string format of the > binary number represented by the array of byte. > > I taught that a solution to my problem could be implement a custom realm, > that extends JDBCrealm and overwrite the method getPassword in such a way > protected String getPassword(String username) { > System.out.println("username= "+username); > String password=super.getPassword(username); > log.info("password="+password); > String hexpassword=HexUtils.convert(password.getBytes()); > log.info("hexpassword="+hexpassword); > return hexpassword; > } > > In theory should work , but I don't know why tomcat still uses the > getPassword of the JDBCrealm , cause I don't see messages printed. > But this is an other problem, and that's better I open another thread. > I hope I'm following the rigtht way > > > On 3/23/06, Alessandro Colantoni <[EMAIL PROTECTED]> wrote: > > > > Hi ! > > I'm lost. Sorry. > > I don't understand when you say > > >I can guarantee that > > >MessageDigest.digest(), which returns an array of bytes, will NOT > > return an > > >array of bytes every time that can be transmitted on a URL i.e. is a > > printable > > >string. > > > > I will try to explain better what I have done > > I have an algorithm called manolo (from the name of the manager of the > > other application that passed it to me). > > I wrote a class > > public class ManoloMessageDigestSpi extends MessageDigestSpi implements > > Cloneable > > > > I have in this class the field > > private byte[] digest = null; > > > > I implemented the method engineDigest: > > > > protected byte[] engineDigest(){ > > byte[] completedDigest=this.digest; > > engineReset(); > > return completedDigest; > > } > > > > in the engineUpdate(byte input) I just set the field digest with the > > encrypted value of input using the manolo algorithm. > > > > > > I wrote a Provider called ManoloProvider > > > > public final class ManoloProvider extends Provider{ > > > > public ManoloProvider() { > > super("manolo", 1.0, "algoritmo pasado por Manolo el > > 21-03-2006"); > > put ("MessageDigest.manolo"," > > com.steria.tc.security.ManoloMessageDigestSpi "); > > } > > } > > Then in a servlet that load on startup I do something like that > > > > Security.addProvider(new ManoloProvider) > > > > > > In the context.xml of my application I put > > <Realm className = "org.apache.catalina.realm.JDBCRealm" > > digest="manolo" > > ..... > > .... > > /> > > > > When The other application(developed in power builder) store a password > > use the manolo algorithm to encrypt it. So what it stores is the same > > value of > > MessageDigest.update(cleartext); > > MessageDigest.digest().toString(). > > > > So let's call: > > cleartext : password in cleartext > > digested : password encrypted > > converted: digested converted with HexUtils.convert > > At the end, when Tomcat authenticates it will compare converted with > > digested and always fail. > > > > Everything work fine if was my application to store password, storing > > RealmBase.Digest(cleartext,manolo) > > > > Thanks for attention > > Alessandro > > > > > > > > > > > > > > On 3/22/06, Jay Burgess <[EMAIL PROTECTED]> wrote: > > > > > > Then maybe I'm misunderstanding something. But I can guarantee that > > > MessageDigest.digest(), which returns an array of bytes, will NOT > > > return an > > > array of bytes every time that can be transmitted on a URL i.e. is a > > > printable > > > string. That's why it has to be encoded in some form, and two hex > > > chars/bytes > > > is the way this gets encoded. > > > > > > However, if you really do want to undo the encoding, simply reverse > > > the logic of > > > the encode() method in the MD5Encoder.java file. > > > > > > Alternatively, if you are just trying to authenticate something in > > > your code, it > > > may work to just run through the digest and encode steps yourself, > > > then compare > > > your end result with what the user sent. If they're the same, then > > > they're > > > authenticated, without you needing to "undo" anything. > > > > > > Jay > > > > > > -----Original Message----- > > > From: Alessandro Colantoni [mailto: [EMAIL PROTECTED] > > > Sent: Wednesday, March 22, 2006 12:37 PM > > > To: Tomcat Users List > > > Subject: Re: return (HexUtils.convert(md.digest())) in RealmBase > > > > > > Thanks for answer. > > > I'm sure that the byte representation is printable, because that's a > > > very > > > easy algorithm, and it is working since some year storing correct > > > encrypted > > > password with the other application. > > > What i should need is an inverse operation of the HexUtils.convert. > > > Is there such an algorithm? > > > I 'll explain better. > > > Lets call this inverse operation convert_inv. > > > It should be so that > > > > > > HexUtils.convert > > > > > > (convert_inv(myAlgorithm(myClearCredential)))=myAlgorithm(myClearCredential). > > > So including convert_inv in myAlgorithm (while the other application > > > follow > > > with the original one) I solve my problem. > > > > > > Is it possible? > > > Thanks for help > > > Alessandro > > > > > > > > > > > > > > > > > > On 3/22/06, Jay Burgess <[EMAIL PROTECTED] > wrote: > > > > > > > > I think this is the right answer: > > > > > > > > digest() returns a sequence of bytes. Depending on the values of > > > the > > > > individual > > > > bytes, if you were to try and convert it to String, you can end up > > > with > > > > non-printable characters, etc. > > > > > > > > I'm assuming that HexUtils.convert() turns each 4 bits of each byte > > > into a > > > > hex > > > > character, so that you end up with a proper String representation of > > > the > > > > digest > > > > that can be sent as part of a URL. > > > > > > > > Jay > > > > > > > > | Jay Burgess [Vertical Technology Group] > > > > | http://www.vtgroup.com/ > > > > > > > > > > > > -----Original Message----- > > > > From: Alessandro Colantoni [mailto: [EMAIL PROTECTED] ] > > > > Sent: Wednesday, March 22, 2006 12:12 PM > > > > To: Tomcat Users List > > > > Subject: return (HexUtils.convert(md.digest())) in RealmBase > > > > > > > > Hi All! > > > > I saw that both method Digest(..) and digest(..) in RealmBase return > > > ( > > > > HexUtils.convert(md.digest())) and not just > > > > md.digest().toString. > > > > > > > > My problem is that user table is maintained by another application > > > > developed > > > > in an other technology. > > > > My application uses this table just to authenticate. > > > > The password of user table is encrypted with an algorithm I've been > > > done. > > > > I wrote a MessageDigestSpi for that algorithm, I wrote my provider, > > > I > > > > registered it and everything looks work fine. > > > > Except that of course if I do: > > > > RealmBase.Digest(myCredentials,myAlgorithm); > > > > > > > > I get a result different from doing > > > > MessageDigest md = MessageDigest.getInstance(myAlgorithm); > > > > md.update(myCredentials.getBytes()); > > > > md.digest().toString; > > > > > > > > but the same result of > > > > MessageDigest md = MessageDigest.getInstance(myAlgorithm); > > > > md.update(myCredentials.getBytes()); > > > > HexUtils.convert(md.digest()) > > > > > > > > So the problem is that the other application stores without using > > > the > > > > HexUtils.convert method > > > > but when tomcat authenticates it uses it. > > > > > > > > One solution could be write a Realm class that extends the JDBCRealm > > > (the > > > > one I'm using) and overwrite these methods. > > > > But I'm afraid that in different versions of Tomcat (i don't want > > > link to > > > > one) could be different signature of these methods. > > > > There's another solution? > > > > At least avoiding overwriting these very important methods? > > > > > > > > And just for curiosity, why HexUtils.convert has been utilized? > > > > > > > > Thanks in advance for help and have a nice springtime > > > > Alessandro > > > > > > > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > >