【问题标题】:NSString MD5 with hash带有哈希的 NSString MD5
【发布时间】:2014-05-08 10:01:17
【问题描述】:

您必须通过发送用户名和密码的网络服务进行登录。 问题是服务器想要一个奇怪的 MD5 格式的密码,我无法生成。

示例

NSString password = @".";
NSString md5 = @"5058f1af8388633f609cadb75a75dc9d";

服务器 MD5 为 "PXñ¯ƒˆc?`œ·ZuÜ"

我需要把5058f1af8388633f609cadb75a75dc9d转化成"PXñ¯ƒ^c?`œ·ZuÜ",但是我没有办法。

编辑

我发现结果是 5058f1af8388633f609cadb75a75dc9d 字符串的哈希值。这是服务器上的.NET 代码:

byte[] passwordBytesEnc = UTF8Encoding.Default.GetBytes(".");
byte[] passwordBytesHash = MD5.Create().ComputeHash(passwordBytesEnc);
string passwordCriptata = UTF8Encoding.Default.GetString(passwordBytesHash);

【问题讨论】:

  • 尝试将 MD5 哈希存储为 UTF8 字符串是任何人所能做的最伤脑筋的事情。除此之外,显然不涉及任何盐,这是犯罪不安全的。我想请你告诉我们这是哪家公司,这样我们就可以避开它们。
  • 而不是猜测,您可以使用您的大脑,查看 ñ 是哪个代码,以及它与 md5 字符串的关系。这肯定是比猜测更好的方法。

标签: ios objective-c cocoa-touch nsstring


【解决方案1】:

试试这个..

- (NSString *)MD5String:(NSString *)string{
    const char *cstr = [string UTF8String];
    NSLog(@"%s",cstr);
    unsigned char result[16];
    CC_MD5(cstr, strlen(cstr), result);
    NSLog(@"%s",result);

    return [NSString stringWithFormat:
            @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
            result[0], result[1], result[2], result[3],
            result[4], result[5], result[6], result[7],
            result[8], result[9], result[10], result[11],
            result[12], result[13], result[14], result[15]
            ];
}

然后这样调用

NSString *md5 = @"5058f1af8388633f609cadb75a75dc9d";
    [self MD5String:md5];

【讨论】:

【解决方案2】:

嗯,您的服务器期望的是 MD5-Hex 值的字符串表示形式(无论出于何种原因......)。

您可以像这样将您的十六进制值转换为字符串:

NSString *string = @"5058f1af8388633f609cadb75a75dc9d";
NSMutableString * newString = [[NSMutableString alloc] init]; //will contain your result-string
int i = 0;
while (i < [string length])
{
    NSString * hexChar = [string substringWithRange: NSMakeRange(i, 2)];
    int value = 0;
    sscanf([hexChar cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value);
    [newString appendFormat:@"%c", (char)value];
    i+=2;
}

(--> How to convert HEX to NSString in Objective-C?)

【讨论】:

  • 用你的代码我得到这个字符串 PXñ¯c?­·ZuÜ and not PXñ¯ƒˆc?œ·ZuÜ。我试图在 NSUTF8StringEncoding 中更改 NSASCIIStringEncoding 但结果是一样的。想法?
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多