objective-c macos encryption passwords sha256

objective c - Generar Sha256 en Objective-C(OS X)



sha256 excel (3)

¡De modo que necesito generar una contraseña de Sha256 en Objective-C, y no puedo entender mi vida cómo hacerlo! ¿Hay algo fácil que me estoy perdiendo?

Intenté implementar el siguiente método (que fue escrito para iPhone, pero pensé que tal vez funcionaría multiplataforma, como lo hace el código Objective-C)

-(NSString*)sha256HashFor:(NSString*)input { const char* str = [input UTF8String]; unsigned char result[CC_SHA256_DIGEST_LENGTH]; CC_SHA256(str, strlen(str), result); NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2]; for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++) { [ret appendFormat:@"%02x",result[i]]; } return ret; }

Pero eso solo arrojó errores sobre CC_SHA256_DIGEST_LENGTH siendo un identificador no declarado.


#import <CommonCrypto/CommonDigest.h>

Objective-C: SHA256 es solo dos líneas:

+ (NSData *)doSha256:(NSData *)dataIn { NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH]; CC_SHA256(dataIn.bytes, dataIn.length, macOut.mutableBytes); return macOut; }

Swift 3

func sha256Hex(string: String) -> String? { guard let messageData = string.data(using:String.Encoding.utf8) else { return nil } var digestData = Data(count: Int(CC_SHA256_DIGEST_LENGTH)) _ = digestData.withUnsafeMutableBytes {digestBytes in messageData.withUnsafeBytes {messageBytes in CC_SHA256(messageBytes, CC_LONG(messageData.count), digestBytes) } } return digestData.map { String(format: "%02hhx", $0) }.joined() }

// Prueba

let sha256HexString = sha256Hex(string:"Hello") print("sha256HexString: /(sha256HexString!)")

sha256HexString: "185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969"


Debe incluir el archivo de encabezado apropiado:

#include <CommonCrypto/CommonDigest.h>

De acuerdo con la documentación de Cryptographic Services esto debería estar disponible en iOS y OS X.

En OS X v10.5 y posterior e iOS 5.0 y posterior, Common Crypto proporciona soporte C de bajo nivel para cifrado y descifrado. Common Crypto no es tan sencillo como Security Transforms, pero proporciona una gama más amplia de funciones, incluidos esquemas de hash adicionales, modos de cifrado, etc.