6

The time I used to develop applications on iPhone I was converting String to SHA1 with two combination:

  • Data
  • Key

Now I am developing an Android application and I did not any example for how to calculate SHA1 With key.

I am greatly appreciative of any guidance or help.


[The code that I currently use]

private void convertStringToSHA1() { String sTimeStamp = new SimpleDateFormat("MM/dd/yyyy HH:MM:SS").format(new java.util.Date()); String sStringToHash = String.format("%1$s\n%2$s", "Username",sTimeStamp); MessageDigest cript = MessageDigest.getInstance("SHA-1"); cript.reset(); cript.update(sStringToHash.getBytes("utf-8")); sStringToHash = new BigInteger(1, cript.digest()).toString(16); } 
3
  • 1
    What code did you use for that conversion? Commented Dec 26, 2010 at 15:37
  • 4
    SHA-1 with key .. is HMAC? what is the purpose of this? Commented Dec 26, 2010 at 15:39
  • @ thejh i am updating the answer right a way. Commented Dec 26, 2010 at 15:50

2 Answers 2

6

Try something like that:

private String sha1(String s, String keyString) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException { SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(key); byte[] bytes = mac.doFinal(s.getBytes("UTF-8")); return new String( Base64.encodeBase64(bytes)); } 

SecretKeySpec docs.

Sign up to request clarification or add additional context in comments.

3 Comments

Thank you very much for the response, but Base64.encodeBase64 is imported from android.util.Base64 or org.kobjects.base64? thanks in advance.
Just to let you know the API android.util.Base64 does not have the method you mentioned i used : android.util.Base64.encode(bytes, 0)
In my example this is imported from org.apache.commons.codec.binary and you can download it from commons.apache.org/codec/download_codec.cgi
0

Another solution would be using apache commons codec library:

@Grapes( @Grab(group='commons-codec', module='commons-codec', version='1.10') ) import org.apache.commons.codec.digest.HmacUtils HmacUtils.hmacSha1Hex(key.bytes, message.bytes) 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.