等效于PHP函数hash()和iOS的rawoutput

等效于PHP函数hash()和iOS的rawoutput,php,objective-c,hash,sha512,Php,Objective C,Hash,Sha512,我正在尝试为iOS找到此函数的等效项: hash('sha512', '123', true); 这是我正在使用的方法,相当于:hash('sha512','123',false) -(NSString*)sha512{ NSData*data=[自数据使用编码:NSUTF8StringEncoding]; uint8_t摘要[抄送摘要长度]; CC_SHA512(data.bytes、data.length、digest); NSMutableString*输出=[NSMutableStri

我正在尝试为iOS找到此函数的等效项:

hash('sha512', '123', true);
这是我正在使用的方法,相当于:
hash('sha512','123',false)

-(NSString*)sha512{
NSData*data=[自数据使用编码:NSUTF8StringEncoding];
uint8_t摘要[抄送摘要长度];
CC_SHA512(data.bytes、data.length、digest);
NSMutableString*输出=[NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH*2];
对于(int i=0;i
我如何才能让它给我rawoutput?

如果您想要NSData输出(它是原始字节的包装:

//每个OP请求的
NSString
上的类别

- (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显示其字节的方式:

SHA512数据:


如果需要指向字节的指针,只需使用
sha512Data.bytes

这正是我试图实现的目标,希望这能对遇到相同问题的任何人有所帮助

-(NSString*)hashPassword:(NSString*)password ansSalt:(NSString*)salt{
NSString*passwordSalted=[NSString stringWithFormat:@“%@{%@}”,密码,salt];
NSData*passwordData=[PasswordSaltedDataUsingEncoding:NSUTF8StringEncoding];
uint8_t散列[CC_SHA512_DIGEST_LENGTH];
CC_SHA512([passwordData bytes]、[passwordData length]、哈希);
NSMutableData*allData=[[NSMutableData alloc]init];
[allData appendBytes:哈希长度:CC_SHA512_DIGEST_length];
对于(NSInteger i=1;i<1000;i++){
[allData appendBytes:[passwordData bytes]长度:[passwordData length]];
uint8_t hashLoop[CC_SHA512_DIGEST_LENGTH];
CC_SHA512([allData bytes],[allData length],hashLoop);
[所有数据集长度:0];
[allData appendBytes:hashLoop长度:CC_SHA512_DIGEST_长度];
}
NSData*imageData=[NSData dataWithBytes:[allData字节]长度:[allData长度]];
返回[imageData base64EncodedStringWithOptions:0];
}

定义“原始输出”。您是指NSData而不是字符串吗?举个例子会有所帮助。代码看起来像
NSString
上的一个类别,这就是您想要的吗?原始输出是“原始二进制数据”是的,我用它作为NSString的一个类别,例如convenience@JaredH不是真正的重复,OP不需要
NSString
结果,它本质上就是OP在问题中提供的结果。
NSData *sha512Data = [@"123" sha512];
NSLog(@"sha512Data: %@", sha512Data);
- (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];

}