【问题标题】:Hash password in Swift applicationSwift 应用程序中的哈希密码
【发布时间】:2016-01-15 09:20:05
【问题描述】:

出于安全考虑,我将对一些数据进行加密,包括我的应用程序中的用户密码。

我的同事选择了 scrypt 哈希算法,长度为 64 字节,种子固定,然后转换为十六进制。

散列“A12345678Z”导致:25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251

种子是“HeanpyftAkWilfUd”。

在服务器上,他们正在使用这个实现:https://github.com/ricmoo/pyscrypt

例子:

scrypt.hash(“A12345678Z", “HeanpyftAkWilfUd").encode('hex’)

->

25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251

我的问题是如何在 Swift 中做到这一点?使用什么库,如果可能的话 - 给我看示例代码,这将导致散列“A12345678Z”完全这样:

25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251

【问题讨论】:

    标签: encryption passwords hash scrypt


    【解决方案1】:

    您可以使用Swift-Sodium。这是Sodium crypto library 的 Swift 接口。

    这是 README.md 中的一个示例

    let sodium = Sodium()!
    let password = "Correct Horse Battery Staple".toData()!
    let hashedStr = sodium.pwHash.scrypt.str(password,
    opsLimit: sodium.pwHash.scrypt.OpsLimitInteractive,
    memLimit: sodium.pwHash.scrypt.MemLimitInteractive)!
    
    if sodium.pwHash.scrypt.strVerify(hashStr, passwd: password) == false {
       // Password doesn't match the given hash string
    }
    

    【讨论】:

    • 好的,但我无法达到与他们相同的结果。如果我使用你的例子,我会得到一个不同的十六进制值。有什么想法可以达到完全相同的结果吗?
    猜你喜欢
    • 2023-03-02
    • 2012-05-24
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2020-03-04
    • 2012-07-07
    相关资源
    最近更新 更多