2016-08-24 67 views
-4

我創建下面的代碼的SHA512哈希:斯威夫特解密SHA512哈希

func createSHA512(source:String) -> String { 
    let rawstr:NSString = NSString(format: "%@%@", source, "xxxxxxxxxxxxxx"); 
    let data = rawstr.dataUsingEncoding(NSUTF8StringEncoding)!; 
    var digest = [UInt8](count:Int(CC_SHA512_DIGEST_LENGTH), repeatedValue: 0); 
    CC_SHA512(data.bytes, CC_LONG(data.length), &digest); 
    let output = NSMutableString(capacity: Int(CC_SHA512_DIGEST_LENGTH)); 
    for byte in digest { 
     output.appendFormat("%02x", byte); 
    } 
    return output as String; 
} 

是否有可能這個哈希與斯威夫特2解密原來的字符串?

+2

哈希的目的是它不能被撤消(解除哈希,解密)。這不是一種加密方法。 – Codo

+0

這隻有通過暴力或如果你有一個包含哈希和他們已知的「原件」的彩虹表纔有可能。你不能解密一個散列。 – donnywals

+2

SO搜索'decrypt sha hash'具有(當前)351次匹配。我無法想象他們沒有人回答你的問題。 –

回答

2

SHA是散列,而不是加密。哈希不包括原始信息中的所有信息,它是單向函數。這是原始數據的簽名,而不是它的一個版本。

因此不,不能撤銷檢索原件。

「反向」的唯一選擇是創建原始的猜測並嘗試對它們進行散列並查看結果是否匹配。請注意,散列並不是唯一的,所以即使您遇到了匹配,您也無法100%保證它與原始匹配,只是它具有相同的值。