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 <afolgue...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> 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> ... > > 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?
Works. Thank you for your help! On Apr 27, 11:23 am, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Apr 27, 4:02 pm, Alex <afolgue...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > > > 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 > > > > > ... > > > 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?- Hide quoted text - > > - Show quoted text -- Hide quoted text - > > - Show quoted text -