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?

On Apr 27, 4:02 pm, Alex [email protected] wrote:

{

}

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!

On Apr 27, 11:23 am, Frederick C. [email protected]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs