Как хэшировать строку, используя SHA-1 с ключом? - PullRequest
6 голосов
/ 26 декабря 2010

Время, которое я использовал для разработки приложений на iPhone, я конвертировал String в SHA1 с двумя комбинациями:

  • Данные
  • ключ

Сейчас я занимаюсь разработкой приложения для Android, и у меня нет ни одного примера того, как рассчитать SHA1 с помощью ключа.

Я очень благодарен за любое руководство или помощь.


[код, который я сейчас использую]
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);
}

Ответы [ 2 ]

4 голосов
/ 26 декабря 2010

Попробуйте что-нибудь подобное:

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 документы.

0 голосов
/ 01 июля 2015

Другое решение будет использовать библиотеку кодеков Apache Commons:

@Grapes(
    @Grab(group='commons-codec', module='commons-codec', version='1.10')
)

import org.apache.commons.codec.digest.HmacUtils

HmacUtils.hmacSha1Hex(key.bytes, message.bytes)
...