Swift应用程序中的哈希密码

时间:2015-10-16 12:01:50

标签: encryption passwords hash scrypt

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

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

Hashing" A12345678Z "导致:25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251

种子是“ HeanpyftAkWilfUd ”。

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

示例:

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

- >

25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251

我的问题是如何在Swift中做到这一点?使用什么库以及是否可能 - 向我展示示例代码,这将导致哈希" A12345678Z "正是如此:

25fac84a1cc3a8f6706848d1016cfe7e9d3631691306dcacae68c11c7b54f0bf89e7a7fc51f7fcc19671775acb21c8d928c4c96bb66d915925de58b8b36ab251

1 个答案:

答案 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
}