首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Mac中获得与Linux gcc/gnu密码(3)相同的加密功能?Linux密码(3)有MD5和SHA512。苹果Gcc地窖(3)*仅*使用DES

如何在Mac中获得与Linux gcc/gnu密码(3)相同的加密功能?Linux密码(3)有MD5和SHA512。苹果Gcc地窖(3)*仅*使用DES
EN

Stack Overflow用户
提问于 2015-09-14 16:30:38
回答 1查看 3.5K关注 0票数 8

我正在将一些c代码从Linux迁移到Mac (yosemite)。Mac ()函数(如我所确定的是unistd.h )与Linux中的gcc/gnu函数不一样。我有Linux和Mac上的测试程序,如果使用printf显示结果,则crypt() c库函数将显示一个34个字符的字符串。Mac上的相同代码只显示一个13个字符字符串。一些研究表明,不同之处显然是Linux ()库例程使用不同的加密算法从gnu/gcc Linux端的较长向量中生成哈希。一些信息还表明,Apple库crypt()函数只使用DES加密原始字符串和salt。我想让我的测试代码在Linux和Mac平台上产生相同的结果。

对于Apple,是否有一个与gnu/gcc Linux版本等距的正确的crypt()函数,也许在一些开源的加密库中?

或者,在Mac开发工具中的某个地方,对于Apple Mac,是否存在gnu等效的加密(3)功能?(我对Mac非常陌生)。我使用的是clang编译器,这是从Apple下载的Xcode内容的一部分,当前用于Yosemite 10.10.5,我猜我不是第一个遇到这种异常的人。谢谢你提供任何信息。

阿。只需稍作修改: Apple MacOSX的内容在检查哈希时使用DES,因此得到了13 char结果。Gnu/gcc使用MD5 algo,因此产生了34 char的散列。这里将对此进行解释:节点/crypt.html#crypt是我的精炼问题;对于Mac,是否有一个使用MD5 (或SHA512)而不是DES的等效函数?

(*第二编辑注意:这正变得有趣。)DES很差,但是可以在Kali中使用"hashcat“破解MD5?建议显然是去SHA512。关于学术测试/验证的详细信息。MD5破解在这里:https://uwnthesis.wordpress.com/2013/08/07/kali-how-to-crack-passwords-using-hashcat/,我的问题仍然存在。Mac有MD5密码(3)功能吗??( Thx.)

(请原谅我不懂礼节。基于Mac /gcc的加密()功能是硬连接的垃圾,只能使用DES,这是一种被证明是易碎的散列,比MD5更糟糕。(将盐字符串称为$6$,您将得到一个13 char DES散列。难以置信!)我发现了许多正确创建密码哈希的方法。( MD5和SHA512)在Linux平台(perl、python等)它们通常使用"crypt“lib (在Linux上使用"-lcrypt”选项),或者对python使用"passlib“。但是我的MacBook,刚刚更新到约塞米蒂10.10.5甚至没有"passlib"!(我以前的Fedora框运行Python2.5.1,当前的CentOS框运行Python2.6.6。讨厌的小Macbook使用"python“命令指示Python2.7.10。我在"ServerFault“网站上找到了一个很好的帖子:https://serverfault.com/questions/330069/how-to-create-an-sha-512-hashed-password-for-shadow?newreg=df160746fbcd47878d600cbe76ec8b7f

我猜想,第一个python和perl脚本在Linux上工作,因为它们使用的是glibc (),但是似乎在任何地方都不存在"passlib.hash“,无论是Linux还是Mac。

我怎么能在这个MacBook上创建一个像样的密码哈希呢?我是Mac,由于我已经确认苹果在其SHA512文件中使用了.plist密码哈希,我确信这种功能必须存在于这个奇怪(但很可爱)的外星硬件的某个地方。如果有人好奇的话,你可以从终端的cmd行输入这个来查看你在约塞米蒂上的"ShadowHashData“:(对不起,忘记了这方面的参考,发现它搜索了最后一个nite,真的很有帮助)

代码语言:javascript
复制
sudo defaults read /var/db/dslocal/nodes/Default/users/<yourusername>.plist ShadowHashData | tr -dc 0-9a-f | xxd -r -p | plutil -convert xml1 - -o -

因此,达尔文/约塞米蒂似乎在使用ok加密。我读了一些关于普通密码的苹果文档,但是关于如何调整gcc来指向包含这些关键内容的库的信息却很少。当我决定如何解决这个问题时,我会在这里发布答案。

EN

回答 1

Stack Overflow用户

发布于 2015-09-16 22:52:42

OS没有在任何事情上使用它的crypt函数。它是为了与POSIX兼容,POSIX并没有定义它的工作方式,而且不同的平台多年来构建了不同的解决方案。Linux不是特别的“正确”,它只是另一个特定于供应商的解决方案。苹果公司解释了他们在地窖中使用crypt的理由(1):

这个库(FreeSec 1.0)是在美利坚合众国以外开发的,作为美国唯一的libcrypt加密库的一个未支配的替代品。链接到crypt()接口的程序只有在仅为身份验证目的使用crypt()并避免使用上面列出的其他程序员接口时才能从美国导出。在库中进行了特别的注意,以便只使用crypt()接口的程序不会拉入其他组件。

如果您需要跨平台密码散列,那么您需要使用一个已知的算法来实现它,而crypt并没有提供这种算法。一般来说,这意味着您需要生成自己的格式,因为实际上没有标准的格式。我建议您使用PBKDF2,而不仅仅是盐渍SHA2,因为它包括拉伸和腌制。破解脆弱的SHA512密码与约翰开膛手仍然是非常快和容易。有了良好的伸展,即使是相当弱的密码也可以得到保护。(从对Linux的crypt的描述来看,他们似乎在做一些类似于PKBDF2的事情;可能是PBKDF2而没有命名它。)类似的算法包括氪石bcrypt。我喜欢PBKDF2,因为它是如此的无处不在,并且是由NIST推荐的(尽管有非常合理的论据认为bcrypt和scrypt更强大)。

PKBDF2的各个部分并不是那么复杂,在C中有一些很好的实现,可以使用许可的许可。请参阅MGCryptor中的一个例子,该示例包含了在带有MIT许可证的简单ANSI中所需的所有部分。特别关注pkcs5_pbkdf2(),这可能正是您想要的。

PBKDF2在许多平台和语言中广泛可用。OS通过公共密码提供它。

当然,您也可以使用Crypto实现您自己版本的Linux crypt。但是,除非您计划使用兼容的许可,否则您必须非常小心,不要在此过程中复制任何(L)GPL代码。就我个人而言,我会构建一个基于PBKDF2 2的解决方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32569597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档