【问题标题】:Swift decrypt SHA512 hash [duplicate]Swift解密SHA512哈希[重复]
【发布时间】:2016-12-31 06:11:48
【问题描述】:

我使用以下代码创建了一个 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;
}

是否可以用 Swift 2 将这个 Hash 解密为原始字符串?

【问题讨论】:

  • 散列的真正目的是它不能被撤消(未散列,解密)。这不是一种加密方法。
  • 这只能通过蛮力实现,或者如果您有一个包含散列及其已知“原件”的彩虹表。您无法解密哈希。
  • decrypt sha hash 的 SO 搜索(当前)有 351 次点击。我无法想象他们都没有回答你的问题。

标签: ios objective-c swift sha


【解决方案1】:

SHA 是哈希,而不是加密。哈希不包括原始信息中的所有信息,它是一种单向函数。这是原始数据的签名,而不是它的版本。

所以不,检索原件无法撤消。

“反转”的唯一选择是创建原始猜测并尝试对它们进行散列并查看结果是否匹配。请注意,哈希值不是唯一的,因此即使您得到匹配项,也不能 100% 保证它与原始值匹配,只能保证它的哈希值相同。

【讨论】:

    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 2011-06-05
    • 2019-11-28
    • 1970-01-01
    • 2018-12-03
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多