Pregunta

Estoy usando la función MD5 y la codificación Base64 para generar un secreto de usuario (usado para iniciar sesión en la capa de datos de la API utilizada)

Hice el código en javascript y está bien, pero en Objective C estoy luchando con la lista de materiales

mi código es:

NSString *str = [[NSString alloc] 
                 initWithFormat:@"%@%@%@%d", 
                    [auth uppercaseString], 
                    [user uppercaseString], 
                    [pwd uppercaseString], 
                    totalDaysSince2000];

NSString *sourceString = [[NSString alloc] initWithFormat:@"%02x%02x%02x%@", 
                          0xEF, 
                          0xBB, 
                          0xBF, 
                          str]; 

NSString *strMd5 = [sourceString MD5]; 

NSData *sourceData = [strMd5 dataUsingEncoding:NSUTF8StringEncoding];  
NSString *base64EncodedString = [[sourceData base64EncodedString] autorelease];  

usando el código de arriba me estoy metiendo en la memoria:

alt text
(fuente: balexandre.com)

La bruja no es lo que realmente necesito...

Incluso lo intenté con

"%c%c%c%@", (char)239, (char)187, (char)191, str

sin suerte...

usando UTF8String No parece agregar la lista de materiales automáticamente como en C# :-(

¿Cómo puedo agregar la lista de materiales correctamente?

¿Fue útil?

Solución

Trate de incorporar la lista de materiales directamente en la cadena de formato como literales carácter de escape:

NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];

Otros consejos

Es posible que tenga que añadir la lista de materiales al objeto NSData, no el NSString. Algo como esto:

char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];

he tenido problema similar con Swift y apertura FIME CSV en Excel. Esta pregunta también me ha ayudado mucho.

Una solución simple para SWIFT con el archivo CSV:

let BOM = "\u{FEFF}"
csvFile.append(BOM)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top