2015-09-26 2 views
0

Я использовал это md5, и я получил хешированный результат. Однако возвращение выглядит так: <8f833933 03a151ea 33bf6e3e bbc28594>. Я новичок в быстром, поэтому не совсем уверен, что это инкапсуляция. Как мне избавиться от меньше и больше, чем знак?md5 хеш возвращается с инкапсуляцией в swift

+0

Это означает, что объект NSData печатается с использованием метода 'description'. Если вы ищете «NSData to hex string», вы должны найти некоторые решения (например: http://stackoverflow.com/a/29642198/1187415). –

ответ

0

Как вы можете видеть из подписи, функция возвращает объект NSData:

func md5(#string: String) -> NSData 

Если вы хотите, чтобы преобразовать его в строку, вам нужно кодировать его в воспринимаемом формате. Наиболее распространенным является шестнадцатеричное представление.

Если вы используете новую функцию Swift 2 из этого вопроса, который возвращает массив Uint8

func md5(string string: String) -> [UInt8] { 
    var digest = [UInt8](count: Int(CC_MD5_DIGEST_LENGTH), repeatedValue: 0) 
    if let data = string.dataUsingEncoding(NSUTF8StringEncoding) { 
     CC_MD5(data.bytes, CC_LONG(data.length), &digest) 
    } 

    return digest 
} 

вы могли бы использовать эту удобную toHex функцию:

func toHex(bytes: [UInt8]) -> String { 
    var numbers = [String]() 
    for byte in bytes { 
     if byte < 0x10 { 
      numbers.append("0") 
     } 
     numbers.append(String(byte, radix: 16, uppercase: true)) 
    } 
    return numbers.joinWithSeparator("") 
} 

Тогда это возвращает строку:

toHex(md5("Hello")) 

(По-моему, вы всегда должны отдавать предпочтение чистым типам Swift (arr ay UInt8) по типам Foundation (NSData).)

+0

@ user3813647 Если этот ответ решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав на галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. – idmean

Смежные вопросы