Я пытаюсь найти эквивалент этой функции для 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?
Если вы хотите вывод 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
,
Это более точно, что я пытался сделать, надеюсь, это может помочь всем, кто сталкивается с той же проблемой.
Как использовать 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];
}