HMAC авторизация (HMAC-SHA256)

340
26 февраля 2017, 08:11

Реализовал на Java работает. Не могу перевести код на android.

class NaiveHmacSigner {
public static byte[] hmac(String algorithm, byte[] secret, String data)
    throws NoSuchAlgorithmException, InvalidKeyException {
    final Mac mac = Mac.getInstance(algorithm);
    final SecretKeySpec spec = new SecretKeySpec(secret, algorithm);
    mac.init(spec);
    return mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
}

private final String identity;
private final byte[] secret;
public NaiveHmacSigner(String id, String key) {
    this.identity = String.valueOf(id);
    this.secret = Base64.getDecoder().decode(key);
}
public Map<String, String> newSignature(String method, String path)
    throws InvalidKeyException, NoSuchAlgorithmException {
    final String date = OffsetDateTime.now().format(RFC_1123_DATE_TIME);
    final String nonce = String.valueOf(System.currentTimeMillis());
    final String data = method + path + date + nonce;
    final String digest = Base64.getEncoder().encodeToString(
        hmac("HmacSHA256", this.secret, data)
    );
    final Map<String, String> result = new HashMap<>();
    result.put("Date", date);
    result.put("Authentication", String.format("hmac %s:%s:%s", this.identity, nonce, digest));
    return result;
}
}
public class SignTest {
/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException, IOException {
     NaiveHmacSigner signer = new NaiveHmacSigner("45000007551554", "3M0VjbYDkSXJFZbqdGEjpI/kOCB22IsBxG1BslUDrwU=");
    Map<String, String> signature = signer.newSignature("GET", "/api/client/mobile/1.0/history");
    System.out.println(signature);
}
}
READ ALSO
Алгоритм Дейкстры + Builder pattern - Java

Алгоритм Дейкстры + Builder pattern - Java

Дали задание реализовать паттерн Builder для алгоритма Дейкстры, что бы объект Graph был immutable, и были методы нахождения кратчайшего путиЯ написал...

516
Как узнать какая кнопка нажата?(java)

Как узнать какая кнопка нажата?(java)

Есть форма, на этой форме есть кнопкиИх может быть и 100 и 200 и т

462
Замена данных по шаблону Java RegExp

Замена данных по шаблону Java RegExp

Подскажите пожалуйста как сделать замену подстроки в строк путем регулярных выражений? В тексте (html) есть так называемые переменные по которым...

394
Как преобразовать XML to Java?

Как преобразовать XML to Java?

На сервер приходит xml-файл:

294