- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我应该使用什么值来生成 Argon2i 哈希,我如何才能找到我的硬件可以承受的适当设置?
即:
memory_cost
time_cost
threads
作为:
$options = [
'memory_cost' => 1<<17,
'time_cost' => 4,
'threads' => 3,
];
$hash = password_hash('test', PASSWORD_ARGON2I, $options);
有a simple script in PHP docs为 bcrypt 哈希找到合适的成本值。这如何适用于 Argon2?
最佳答案
发件人:PHP RFC Argon2 password_hash
来自:
Due to the variety of platforms PHP runs on, the cost factors are deliberately set low as to not accidentally exhaust system resources on shared or low resource systems when using the default cost parameters. Consequently, users should adjust the cost factors to match the system they're working on. The following list outlines hashing performance on various systems using these default cost values.
Common Cloud Server 512 MB, 1 Core: 3-5 ms
Common Cloud Server 2 GB, 2 Core, 1-3 ms
512 MB Raspberry Pi Zero: 75-85msAs Argon2 doesn't have any “bad” values, however consuming more resources is considered better than consuming less. Users are encouraged to adjust the cost factors for the platform they're developing for.
发件人:What Is The Recommended Number Of Iterations For Argon2
The argon2 paper gives the following procedure (paraphrased) for determining the parameters you should use:
- Figure out how many threads you can use, choose $h$ accordingly.
- Figure out how much memory you can use, choose $m$ accordingly.
- Decide on the maximum time $x$ you can spend on it, choose the largest $t$ such that it takes less than $x$ with your system and other parameter choices.
I.e. they recommend you run it on your system and decide the largest parameters that match your limits on memory and processor time use.
( link here )
Degree of parallelism
p
determines how many independent (but synchronizing) computational chains can be run. It may take any integer value from 1 to 2^24 -1Memory size
m
can be any integer number of kilobytes from8p
to 2^32 −1. The actual number of blocks ism′
, which ism
rounded down to the nearest multiple of4p
.Number of iterations
t
(used to tune the running time independently of the memory size) can be any integer number from 1 to 2^32 -1
Figure out how many threads can be used on each call to Argon2 (parallelism). They recommend twice as many as the number of cores dedicated to hashing passwords.
Figure out how long each call can take. One recommendation for concurent user logins is to keep it under 0.5ms.
Measure the time for hashing using your chosen parameters. Find a time_cost that is within your accounted time. If time_cost=1 takes too long, lower memory_cost.
因此,从上面的摘录来看,您似乎希望以 0.5ms
的时间跨度为目标,正如在 BCrypt 示例中一样,由 PHP microtime
测量。然后,您可以将线程 的数量设置为您的 CPU 运行的内核数量的两倍,因此对于 4 核处理器,假设为 8。
然后您应该能够使用上述两个值运行一系列测试,以找到 memory_cost 的第三个有效值。
在您的服务器上运行一些测试,看看服务器可以轻松管理什么。探索 if this CLI可以提供帮助。
按照上面引用的顺序更改三个变量(在 Threads 下),因此通过使用大量迭代计数来调整内存。
简而言之,我们无法为您提供“最佳建议”指南,因为这取决于具体规范。你打算在...上运行它
关于php - PHP7 中的 Argon2i - 选择合适的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48320403/
给定一个 Option[Future[Option[Int]]] : scala> val x: Option[Future[Option[Int]]] = Some ( Future ( Some
如果我理解正确,EitherT[Option,A,B] 应该与 Option[Either[A,B]] 相同,但编译器不同意.以下代码编译失败: def f[A,B] = implicitly[Eit
我刚开始在使用 parcel.js 构建静态 Assets 时遇到此错误。它在本地工作,但我在 Heroku 上的构建出错,我不确定它是否相关。 最佳答案 得到同样的问题。通过将 core-js 安装
当我生成 Telerik Report 时,只有 Export PDF 可用。即使我将 docx 和 xlsx 的配置设置为 true。这是我在网络配置中的配置。
我的 iTunesConnect 应用程序显示 Apple Pay 选项。我正在使用布伦特里。 即使我们没有在应用程序中使用 Apple Pay 功能。 有人可以帮我解决如何在我的 itunesCon
我正在 Raspbian 中从命令行运行以下查询: mysql -u $NAME -p $PASS Tweets -e "SELECT count(*) FROM raw_tweets;" 它输出以下
我正在尝试使用 ffmpeg(在 linux 下)为视频添加一个小标题。所以,我使用: ffmpeg -i hk.avi -r 30000/1001 -metadata title="SOF" hk_
我正在尝试使用 ffmpeg 使用 ffserver 流式传输视频。您将在 ffserver1.conf 文件下方找到 ffmpeg 命令的日志输出。 其中一个错误引用了预设,每次我尝试使用预设时,我
我正在尝试对 Option 使用 fold 或 map 操作而不是 match。 我有一个选项 val ao: Option[String] = xxxx 和一个函数 f: (String => Fu
Dockerfile documentation表示有可能通过 --platform FROM 中的选项像这样的指令: FROM [--platform=] [AS ] 在我的 dockerfile
我不确定“属性(property)”或“选项”是否是正确的术语,但这是我需要弄清楚的。 鉴于以下情况: ' $.fileup({ url: '/file/upload',
我正在尝试使用 jQuery 检查是否选择了值 = 1 的选择选项,然后将类添加到某些元素。但有些东西不起作用。可以请人看一下代码吗? 我的代码: Reservation
我对 VIM 中的这些感到困惑。有些事情需要设置,而另一些则让。 而且,我如何检查某个选项。我知道这是一个选项,因为我使用 set 来更改它。 例如,如何检查当前文件类型选项是否为 java? 最佳答
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我在看《Professional F# 2.0》一书作者展示如下代码 let a string : option = None if a.IsNone then System.Console.
我习惯使用方法顶部的 java 样板检查输入参数: public static Boolean filesExist(String file1, String file2, String file3
假设我有一串 "Insert Post -title Some PostTitle -category 2 -date-posted 2013-02:02 10:10:10" 我一直在尝试做的是将这个
从 1.3.70 EAP 开始,在 org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions 这是 var useIR: kotlin.Boolean 哪个激活
我无法获取订购捆绑商品的所有子产品及其选项。这可能吗? 最佳答案 以下是您如何找出哪些产品应与所有其他项目一起附加到列表中的捆绑产品中的方法: foreach ($order->getAllItems
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我是一名优秀的程序员,十分优秀!