2

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

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

散列“ A12345678Z ”导致:25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251

种子是“<strong>HeanpyftAkWilfUd”。

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

例子:

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

->

25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251

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

25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251
4

1 回答 1

1

你可以使用Swift-Sodium它是Sodium 加密库的 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
}
于 2015-10-16T13:47:03.837 回答