Legacy encryption function...

Hello everyone, I have an old Java authentication web service that I must use in my rails development. The service takes a username and an encrypted password. I'm having trouble reproducing the same encryption algorithm.

Here is the Java encryption function:   public static String digest(String text)   {     MessageDigest mDigest = null;     try     {       mDigest = MessageDigest.getInstance("SHA");

      mDigest.update(text.toUpperCase().getBytes("UTF-8"));     } catch (NoSuchAlgorithmException nsae) {       nsae.printStackTrace();     } catch (UnsupportedEncodingException uee) {       uee.printStackTrace();     }     byte raw = mDigest.digest();     return new BASE64Encoder().encode(raw);   }

Here is the Ruby encryption function: ... require 'digest/sha1' Base64.encode64(Digest::SHA1.hexdigest('ruby')) ...

Now here is the resulting String calling the Java function with the string 'ruby': "oJtN1kHfQdCCLFN7ATWgAxIH6bc="

Here is what I get with my Ruby function for the same string: "MThlNDBlMTQwMWVlZjY3ZTFhZTY5ZWZhYjA5YWZiNzFmODdmZmI4MQ==\n"

So, anybody knows what I'm doing wrong?

Hello everyone, I have an old Java authentication web service that I must use in my rails development. The service takes a username and an encrypted password. I'm having trouble reproducing the same encryption algorithm.

Here is the Java encryption function: public static String digest(String text) { MessageDigest mDigest = null; try { mDigest = MessageDigest.getInstance("SHA");

  mDigest\.update\(text\.toUpperCase\(\)\.getBytes\("UTF\-8"\)\);
\} catch \(NoSuchAlgorithmException nsae\) \{
  nsae\.printStackTrace\(\);
\} catch \(UnsupportedEncodingException uee\) \{
  uee\.printStackTrace\(\);
\}
byte\[\] raw = mDigest\.digest\(\);
return new BASE64Encoder\(\)\.encode\(raw\);

}

Here is the Ruby encryption function: ... require 'digest/sha1' Base64.encode64(Digest::SHA1.hexdigest('ruby'))

this outputs the digest as hex (before base64ing it), ie a string containing the characters "0" through "9", "A" through "F", whereas your java code outputs the raw data, ie if the first 2 bytes of the digest were 53 the ruby code would output

53

but the java code would output

S (the ascii code for S is 53).

Digest::SHA1.digest('ruby') would be the same behaviour as your java code (don't forget to convert the text to upper case)

Fred.

Fred

Works. Thank you for your help!