【发布时间】:2020-01-23 21:34:22
【问题描述】:
我使用 crypt() 来加密我的一个项目的密码。当用户选择密码时,密码是这样加密的:
password = crypt(<password chosen>, <user's account name>)
问题是当用户使用他们的密码登录时。如果他们键入的内容与他们的密码不匹配,则应输入以下 if 检查:
if (strcmp(crypt(<what user types in as password>, <user's account name>), <user's encrypted password>)) {
//...
}
在某个特定情况下不会。假设他们的密码是“asdf”。如果他们输入带有任何随机尾随字符的“asdf”,例如“asdffffff”或“asdf339sfd”,它仍然接受密码。它似乎忽略了“asdf”之后的所有内容。
这是 crypt 的已知问题吗?还有其他加密密码的方法吗?
【问题讨论】:
-
你介意分享minimal reproducible example吗?你的描述听起来不对。
-
我怀疑你的 input 方法,而不是
crypt()(顺便说一下,它的工作方式与你想象的不同 - 所以你最好阅读它的 @987654322 @)。 -
@Downvoters:这实际上有足够的信息来提供完整的答案,我现在正在写一个。
-
您确定您的密码被截断为 4 个字符吗?可能是八个字符吗?你看,八比四更容易解释。
-
@zwol 好吧,这不是否决这个的唯一原因。另一个原因是没有阅读函数规范并检查错误。三分之一的人对 cmets 没有反应。
标签: c encryption passwords crypt