2016-08-24 57 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%保证它与原始匹配,只是它具有相同的值。