Jason Aslakson
2008-Apr-21 15:52 UTC
translating Java encoding/hashing code to Ruby in a rails ap
Good Day to all! I am trying desperately to solve the following problem and need the help of a Rails/Ruby guru. I am receiving data via a POST request from a remote web application. The information is composed of 5 fields of data plus a sixth field that''s the encoded version of the first 5 bits plus a shared secret. The problem I am having is converting the sample code I was given (Java) to Ruby so that I can re-hash the data in my Rails app to confirm the validity of the data. The allDataElements string is the same for both sets of code - a string of key, value pairs from the POST plus the shared secret "userID=123456&timeStamp=04/21/2008&firstName=myfirstname&lastName=mylastname&firm=G mycompanyName&sharedSecret=SOMEREALLYCRYPTICTEXT" Once I hash this text I should be able to compare it to the hashed value I was passed in the POST request. Here''s the Java code: //Generate hash from profile data in hashmap object MessageDigest md = MessageDigest.getInstance("MD5"); byte[] mashedHash = md.digest(allDataElements.getBytes("UTF-8")); BASE64Encoder encoder = new BASE64Encoder(); //Encode to pass as a printable String to The Hartford website yourhashedKey = encoder.encode(mashedHash); Here''s my ruby code: yourhashedKey = Base64.encode64(Digest::MD5.digest(allDataElements)) The return value from my code does not match what I receive from the Java code. I believe it has to do with teh UTF-8 parameter in the getBytes function. Can someone help? I''m desperate!!!! Thank you for your help. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Apr-21 16:52 UTC
Re: translating Java encoding/hashing code to Ruby in a rails ap
On 21 Apr 2008, at 16:52, Jason Aslakson wrote:> > > Once I hash this text I should be able to compare it to the hashed > value > I was passed in the POST request. > > Here''s the Java code: > //Generate hash from profile data in hashmap object > MessageDigest md = MessageDigest.getInstance("MD5"); > byte[] mashedHash = md.digest(allDataElements.getBytes("UTF-8")); > BASE64Encoder encoder = new BASE64Encoder(); > //Encode to pass as a printable String to The Hartford website > yourhashedKey = encoder.encode(mashedHash); > > Here''s my ruby code: > > yourhashedKey = > Base64.encode64(Digest::MD5.digest(allDataElements)) >Does it work if all of your data is just plain ascii? in that case the utf-8 ness wouldn''t make any difference. How is allDataElements computed ? (both ruby & java ) Fred> The return value from my code does not match what I receive from the > Java code. I believe it has to do with teh UTF-8 parameter in the > getBytes function. Can someone help? I''m desperate!!!! > > Thank you for your help. > -- > Posted via http://www.ruby-forum.com/. > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Jason Aslakson
2008-Apr-21 17:03 UTC
Re: translating Java encoding/hashing code to Ruby in a rails ap
Fred, Thanks for getting back to me on this one. Unfortunately I don''t have any insight/ability to test out what happens in the Java code as it''s on another company''s system. I have a request into them to try it without the UTF-8 part so I''ll have to wait and see on that front. However, here''s how the allDataElements string is built. Basically, I just string together the 5 key/value pairs as if it were a GET request and then tack on the sharedSecret value. Here''s the sample Java code I received (sytax errors and all). I have verified that only the variables listed in allDataElements are included in the hash even though there are other variables listed in the sample code. String secretKey = ""; //key we share String userID = ""; //HIFP user id String timeStamp = ""; //timeStamp must be in MM/DD/YYYY String firstName = ""; String lastName = ""; String firm = ""; String emailAddress = ""; String address1 = ""; String address2 = ""; String city = ""; String state = ""; String zip = ""; String Phone = ""; String hashedKey = ""; String allDataElements = "userID=" + userID + "&timeStamp=" + timeStamp + "&firstName=" + firstName);} + "&lastName=" + lastName);} + "&firm=" + firm);} + "&sharedSecret=" + secretKey); try { //Generate hash from profile data in hashmap object MessageDigest md = MessageDigest.getInstance("MD5"); byte[] mashedHash = md.digest(allDataElements.getBytes("UTF-8")); BASE64Encoder encoder = new BASE64Encoder(); //Encode to pass as a printable String to The Hartford website yourhashedKey = encoder.encode(mashedHash); } catch (Exception e) { System.out.println("EMIvul.jsp - Exception: " + e.toString() ); yourhashedKey = null; } Somehow I need to turn this into Ruby. I had thought I would be fine with Base64.encode64(Digest::MD5.digest(allDataElements)) as I have done this type of thing from C# to Ruby before and it seemed to work out. The only difference is the getBytes("UTF-8") part. Thank you for your help. I sincerely appreciate any insight you may have to offer. Frederick Cheung wrote:> On 21 Apr 2008, at 16:52, Jason Aslakson wrote: > >> BASE64Encoder encoder = new BASE64Encoder(); >> //Encode to pass as a printable String to The Hartford website >> yourhashedKey = encoder.encode(mashedHash); >> >> Here''s my ruby code: >> >> yourhashedKey = >> Base64.encode64(Digest::MD5.digest(allDataElements)) >> > > Does it work if all of your data is just plain ascii? in that case the > utf-8 ness wouldn''t make any difference. > How is allDataElements computed ? (both ruby & java ) > > Fred-- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Jason Aslakson
2008-Apr-21 17:57 UTC
Re: translating Java encoding/hashing code to Ruby in a rails ap
Everyone, So, it turns out that the sample code from the client was wrong. Even though I had questioned the naming of the ''firmName'' variable as ''firm'' I had not tried changing the variable name until just now. I have notified the client that they should update their sample code. I thank Fred for his generous willingness to help and I hope that someone finds the code useful down the road as it does turn out that: MessageDigest md = MessageDigest.getInstance("MD5"); byte[] mashedHash = md.digest(allDataElements.getBytes("UTF-8")); BASE64Encoder encoder = new BASE64Encoder(); //Encode to pass as a printable String to The Hartford website yourhashedKey = encoder.encode(mashedHash); can be translated into ruby as yourhashedKey = Base64.encode64(Digest::MD5.digest(allDataElements)) You probably want to formalize the code more, but you get the idea. Best, Jason -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---