小编Mar*_*old的帖子

2021 年存储密码的最佳方式是什么?

我存储密码,如果您是开发人员,那么以实际上最好的方式存储密码很容易。所以我想知道,2021年哪个最好?对我来说,调整我的代码以使其成为最好的代码很容易。

是的- 我研究并阅读了 Stack Overflow 和其他网站上的许多文章,所有这些文章都提供了最好的建议,并且我已经遵循了它,所以这个问题不会重复其他线程。


我目前所做的事情的高级概述:

  • 使用SSL
  • 使用 bcrypt 库
  • 使用密码强度库
  • 每次生成/存储随机的唯一盐
  • 存储为 SHA3_512

这是我从读过的所有文章和主题中“学到”的智慧。

但是,就在最近,有人告诉我,实际上上述内容在 2021 年应该被认为是不安全的。虽然这个有很好的资格,但我仍然对在对话中进行任何安全更改保持警惕,而且我不是安全专家,所以我之前想我做出改变然后我必须测试它。

而且,我想不出比 Stack Overflow 更好的地方了,我知道如果它值得的话,它会立即被切成碎片!我不是安全专家,但我问这个问题听起来很可信。

所以我带着一些惶恐的样子问,并跟随一些我相信的白痴,以下......是的,我问这个不是其他人。请找出我所提出的逻辑,然后我向您展示......哎呀!:

  • 如果Users您的数据库表已被泄露,那么您存储的 SALT 也已被泄露(从我所读到的内容来看,这是普遍接受的)
  • 黑客/密码破解工具非常复杂、成熟并且快速发展/适应。
  • 标准的“黑客”密码数据库拥有超过 7 亿个已使用的明文密码,他们的软件创建了巧妙的变体,可以快速访问数十亿种可能的可能性。
  • 标准黑客软件已经从现有受损数据库的现有字段中获取 bcrypt 和 PBKDF 衍生品的“盐”输入,因此意味着 SALT 变得无关紧要。实际上,它成为现有工具的命令行选项,它简单地描述了算法以及哪个字段是“盐”。
  • 此外,这些工具现在非常复杂,它们可以快速检查具有不同“成本”值、不同 SHA 摘要排列的前 x% 密码,以确定和分析开发人员使用的实际组合(如果他们不知道)。
  • 因此,这些“最新工具”非常聪明,可以使用已知的盐来尝试大量常用技术,并针对选择的“可能目标”来实际确定您是否使用了 SHA1/2/3 或长度和其他内容我真的不明白。但他们不再愚蠢,实际上他们非常非常聪明。
  • 这些“工具”已经存在,并且它们相对容易使用大量命令行选项,因此它们非常容易访问,这极大地拓宽了攻击向量。

因此,使用bcrypt 或类似工具生成随机 SALT更加安全,因为工具已经发展到了这一点。盐实际上不再有任何区别,正如基本上所预期的那样。

问题 1: 以上情况是否属实? (我个人完全不知道)

显然,推荐的 2021 年解决方案如下:

  1. 不要依赖现有加密方法的内置盐功能。
  2. 是的,利用现有的盐功能,但这不足以作为标准。
  3. 您必须创建自己的附加 SALTS,以阻止现有的主流工具。
  4. 您必须创建 2 个额外且单独的 SALTS,存储在 …

security encryption passwords hash bcrypt

6
推荐指数
2
解决办法
5241
查看次数

如何快速计算字符串中连续单个字符的最大数量?

我有一个类似于:但更长的字符串

my $a = "000000001111111111000000011111111111111111111111111111111";
Run Code Online (Sandbox Code Playgroud)

我正在计算“1”的数量:

my $total_1_available = $a =~ tr/1//;
Run Code Online (Sandbox Code Playgroud)

这工作得非常好,而且非常快。

但是,我也希望(以快速的方式)计算连续 1 的总数。连续“1”的最大计数。

在上面的示例中,它将返回以下计数:

11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

因为这是连续的最大值。

所以,我最终得到了 TOTAL_COUNT 和 TOTAL_CONSECUTIVE_COUNT。

我让它与一个 REGEXP 一起工作,它基本上替换了 1,然后计算被替换的内容并循环......实际上完全没问题并且有效......但它“感觉”不对。

理想情况下,我根本不想替换字符串,因为我正在寻找最大连续计数。

但是,我知道在 Perl 中这可能不是最快或最干净的方法。

你能教我更好的方法并增加我的学习吗?

按照要求,这是我当前的代码:

 my $a= "0110011001101111";
 my $total_1_available = $a =~ tr/1//;
 print "Total number of 1's = $total_1_available\n";

 my $max_c = 0;
 while ( $a=~s/(1+)/ / ) {
   $max_c = length($1) if length($1) > $max_c;
 }
 print "Consecutive count   = $max_c\n";
Run Code Online (Sandbox Code Playgroud)

和最终代码:

use strict;
use warnings;
use …
Run Code Online (Sandbox Code Playgroud)

string perl replace count tr

4
推荐指数
1
解决办法
175
查看次数

标签 统计

bcrypt ×1

count ×1

encryption ×1

hash ×1

passwords ×1

perl ×1

replace ×1

security ×1

string ×1

tr ×1