iphone - the - sha512 crypt
hash una cadena de contraseƱa usando SHA512 como C# (2)
Estoy desarrollando la función de inicio de sesión para mi aplicación de iPhone, así que quiero cifrar la contraseña usando el algoritmo de hash SHA512 y luego obtener el resultado como NSString (el resultado debería ser el mismo con SHA512 en C #). Después de pasar mucho tiempo en internet, todavía no descubro la solución. :(
¿Hay alguien que tenga la solución y el código de muestra? ¡Por favor, ayúdenme! ¡Muchas gracias!
[Actualizar] En mi código C #, la contraseña se almacena usando SecureString, por lo que tal vez sea causa de crear una matriz de bytes diferente entre Object-C y C #
Esta función copiará una cadena usando SHA512. La cadena resultante es una representación hexadecimal del hash:
+ (NSString *) createSHA512:(NSString *)source {
const char *s = [source cStringUsingEncoding:NSASCIIStringEncoding];
NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];
uint8_t digest[CC_SHA512_DIGEST_LENGTH] = {0};
CC_SHA512(keyData.bytes, keyData.length, digest);
NSData *out = [NSData dataWithBytes:digest length:CC_SHA512_DIGEST_LENGTH];
return [out description];
}
No olvide incluir el encabezado correcto:
#include <CommonCrypto/CommonDigest.h>
Estoy usando este.
Concuerda con la salida del algoritmo PHP SHA512 :
<?php `hash(''sha512'', ''The quick brown fox jumped over the lazy dog.'');` ?>
Código Objective-C:
+(NSString *)createSHA512:(NSString *)string
{
const char *cstr = [string cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:string.length];
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;
}