цель c — эквивалент хеша () функции PHP с rawoutput для iOS

Я пытаюсь найти эквивалент этой функции для iOS:

hash('sha512', '123', true);

Это мой метод, который я использую, который приравнивается к: hash('sha512', '123', false);

- (NSString *)sha512{

NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];

CC_SHA512(data.bytes, data.length, digest);

NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];

for (int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
{
[output appendFormat:@"%02x", digest[i]];
}

return output;
}

Как я могу получить его, чтобы дать мне rawoutput?

2

Решение

Если вы хотите вывод NSData (который является оберткой вокруг необработанных байтов:

// Категория на NSString за запрос OP

- (NSData *)sha512 {
NSData *dataIn = [self dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH];

CC_SHA512( dataIn.bytes,
(CC_LONG)dataIn.length,
macOut.mutableBytes);

return macOut;
}

Тестовое задание:

NSData *sha512Data = [@"123" sha512];
NSLog(@"sha512Data: %@", sha512Data);

Вывод (отображается в шестнадцатеричном виде, потому что так NSData отображает свои байты:

sha512Data: <3c9909af ec25354d 551dae21 590bb26e 38d53f21 73b8d3dc 3eee4c04 7e7ab1c1 eb8b8510 3e3be7ba 613b31bb 5c9c3621 4dc9f14a 42fd7a2f db84856b ca5c44c2>

Если нужен указатель на байты, просто используйте sha512Data.bytes,

2

Другие решения

Это более точно, что я пытался сделать, надеюсь, это может помочь всем, кто сталкивается с той же проблемой.

Как использовать WSSE в iOS с соленым sha512 с более чем 1 итерацией

- (NSString *)hashPassword:(NSString *)password ansSalt:(NSString *)salt {

NSString *passwordSalted = [NSString stringWithFormat:@"%@{%@}",password,salt];

NSData *passwordData = [passwordSalted dataUsingEncoding:NSUTF8StringEncoding];

uint8_t hash[CC_SHA512_DIGEST_LENGTH];
CC_SHA512([passwordData bytes], [passwordData length], hash);

NSMutableData *allData = [[NSMutableData alloc] init];
[allData appendBytes:hash length:CC_SHA512_DIGEST_LENGTH];

for (NSInteger i = 1; i < 1000; i++) {

[allData appendBytes:[passwordData bytes] length:[passwordData length]];
uint8_t hashLoop[CC_SHA512_DIGEST_LENGTH];
CC_SHA512([allData bytes], [allData length], hashLoop);
[allData setLength:0];
[allData appendBytes:hashLoop length:CC_SHA512_DIGEST_LENGTH];

}

NSData *imageData = [NSData dataWithBytes:[allData bytes] length:[allData length]];

return [imageData base64EncodedStringWithOptions:0];

}
0

По вопросам рекламы [email protected]