пятница, августа 03, 2012

Как сгенерировать SHA-1 дайджест по строке (в том числе и в Android)



public class SecurityUtils {
public static String getSHA1Digest(String str) throws NoSuchAlgorithmException {
if (str == null || str.trim().length() == 0) {
throw new InvalidParameterException("Не указано значение  строки");
}
MessageDigest sha = MessageDigest.getInstance("SHA-1");
byte[] bytes = str.getBytes();
sha.update(bytes);
byte[] digest = sha.digest();

StringBuilder sb = new StringBuilder(40);
for (int i = 0; i < digest.length; i++) {
String hexVal = String.format("%02x", Integer.valueOf((digest[i] + 256) & 0xFF));
sb.append(hexVal);
}

return sb.toString();
}
}

Проверяем:


public class SHA1Test extends TestCase {

public void testSHA1() {
   String sourceString = "12345";
   String expectedResult = "8cb2237d0679ca88db6464eac60da96345513964";
   String result = "";
 
   try {
result = SecurityUtils.getSHA1Digest(sourceString);
} catch (NoSuchAlgorithmException e) {
assertTrue(e.getMessage(), false);
}
 
   assertEquals(expectedResult, result);  
}