Отличный результат HMAC для JAVA и iOS - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь сгенерировать HMAC на основе строкового значения и ключа

public static byte[] hmacSha1(String value, String key) throws NoSuchAlgorithmException, InvalidKeyException {

    // some values hardcoded for simplicity of this code sample
    key = "GET\\n?nodeList\\nThu, 10 Jul 2014 13:35:32 GMT\\nda39a3ee5e6b4b0d3255bfef95601890afd80709\\n";;
    value = "6020834c535670ab1da86f7697241cb43ab6fb90";
    final String type = "HmacSHA1";
    final String charset = "ASCII";

    byte[] keyBytes = new byte[0];
    try {
        keyBytes = key.getBytes(charset);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    SecretKeySpec secret = new SecretKeySpec(keyBytes, type);
    Mac mac = Mac.getInstance(type);
    mac.init(secret);

    byte[] bytes = new byte[0];
    try {
        bytes = mac.doFinal(value.getBytes(charset));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    Log.d(TAG, "bytes to hex: " + bytesToHex(bytes));
    // result Android:  512B5CE2EA1CD71FF34C9DDB693F59288EF71B42
    // iOS: 96f852a08d3ee255b77364a6bbd106be0dc0e44e

    return bytes;
}

И результат Android (шестнадцатеричное значение) не совпадает с тем, в котором есть приложение iOS (с использованием того же строкового значения и ключа).

(NSString *)HMAC_SHA1WithKeyData:(NSData* )key
{
const char * cData = [self cStringUsingEncoding:NSASCIIStringEncoding];

unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];

CCHmac(kCCHmacAlgSHA1, [key bytes], [key length], cData, strlen(cData), cHMAC);

NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
                                      length:sizeof(cHMAC)];

const unsigned char * buffer = (const unsigned char *)[HMAC bytes];
NSMutableString *HMACString = [NSMutableString stringWithCapacity:HMAC.length* 2];
for (int i = 0; i < HMAC.length; i++) {
    [HMACString appendFormat:@“%02x”, buffer[i]];
}

return HMACString;
}

Android HMAC (шестнадцатеричное): 512B5CE2EA1CD71FF34C9DDB693F59288EF71B42

iOS HMAC: 96f852a08d3ee255b77364a6bbd106be0dAC как вы можете попросить 101 (*)соответствует внутреннему результату).

...