寻找有关 Objective-c 密码强度检查器的建议。我做了一些谷歌搜索,没有找到任何点击,也没有在 SO 上找到。我可以写一个,但我想我先在这里检查一下——有人实现了吗?
3 回答
我只知道两个半点的密码强度估计器:zxcvbn(在 CoffeeScript 中,编译为 JavaScript)和Passfault(在 Java 中,似乎打算用作 webapp)。
(实际上,这是一个小小的谎言;我不久前读过一篇博士论文,但我不确定我把链接放在哪里。)
我在任何细节上查看过的所有其他密码“强度”检查器都存在缺陷,通常存在严重缺陷(例如 GRC 的“干草堆”假设一个非常愚蠢的蛮力;即使是开源密码破解器也更加复杂)——前几天,大型英国会员卡计划的密码强度计告诉我,“1Aa”是“GOOD”密码(“GOOD”是最高评级)。
(另一个问题是所需的密码强度取决于它的使用方式:像“W1mCj6B1”这样的 48 位密码对于 Google 帐户来说很好,但作为 Windows/Mac 登录密码或 WPA 密码短语非常弱。)
鉴于它们的稀有性,我认为您不太可能在 Objective-C 中找到一个像样的。如果你最终写了一个,我有一些建议:
- 用 C(或者可能是 C++)编写它。这不会花费你太多,而且更便携;Objective-C 几乎将您与 OS X 和 iOS 联系在一起,就像 .NET 将您与 Windows 联系起来一样(即理论上您可以将运行时移植到其他平台;实际上它在这些平台之外的使用会少得多)。要增加使用率,您可以添加一个 Objective-C API。
- 决定如何处理非 ASCII 字符(以及一般的非英语语言)。基本上有两种选择:
- 禁止他们(人们已经习惯了,对吧?)
- 映射到 ASCII以进行强度估计,例如通过去除重音符号(参见
NSWidthInsensitiveSearch
和NSDiacriticInsensitiveSearch
)并跳过一些箍以将 ı/İ/ß 映射到 i/I/ss。还有kCFStringTransformToLatin
一个承诺将大多数脚本音译为拉丁字母。这个位不需要在 C 中,因为它在很大程度上依赖于 Unicode 库,尽管您可能能够使用 ICU。
最后,密码强度估计是一个难题。猜猜实力
2jmj7l5rSw0yVb_vlWAYkK_YBwk
。现在问谷歌。
为此,我创建了一个方法。我知道这是个老问题,但我认为现在是实际的,所以这里是代码的 url:
https://github.com/ruben-samsonyan/PasswordStrengthChecker/blob/master/passwordChecker.m
Mattt Thompson 为此创建了一个库(请参阅此答案)。这是我找到的最佳选择。