出于安全考虑,我将加密一些数据,包括我的应用程序中的用户密码。
我的同事选择了scrypt哈希算法,长度为64字节,带有固定种子,然后转换为十六进制。
Hashing" A12345678Z "导致:25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251
种子是“ HeanpyftAkWilfUd ”。
在服务器上,他们正在使用此实现:https://github.com/ricmoo/pyscrypt
示例:
scrypt.hash(“A12345678Z", “HeanpyftAkWilfUd").encode('hex’)
- >
25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251
我的问题是如何在Swift中做到这一点?使用什么库以及是否可能 - 向我展示示例代码,这将导致哈希" A12345678Z "正是如此:
25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251
答案 0 :(得分: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
}