Swift 解密 SHA512 哈希
Swift decrypt SHA512 hash
我使用以下代码创建 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;
}
是否可以将此Hash与Swift2解密为原始String?
SHA 是哈希,不是加密。散列不包含原始信息中的所有信息,它是一种单向函数。它是原始数据的签名,而不是它的版本。
所以不,无法撤消以恢复原件。
'reverse' 的唯一选择是对原作进行猜测并尝试对它们进行哈希运算,看看结果是否匹配。请注意,哈希值不是唯一的,因此即使您找到匹配项,也不能 100% 保证它与原始值匹配,只能保证它的哈希值相同。
我使用以下代码创建 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;
}
是否可以将此Hash与Swift2解密为原始String?
SHA 是哈希,不是加密。散列不包含原始信息中的所有信息,它是一种单向函数。它是原始数据的签名,而不是它的版本。
所以不,无法撤消以恢复原件。
'reverse' 的唯一选择是对原作进行猜测并尝试对它们进行哈希运算,看看结果是否匹配。请注意,哈希值不是唯一的,因此即使您找到匹配项,也不能 100% 保证它与原始值匹配,只能保证它的哈希值相同。