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
-~----------~----~----~----~------~----~------~--~---