如何在Mac OS X中获得与Linux gcc / gnu crypt(3)相同的crypt(3)
我正在将一些c代码从Linux迁移到Mac OSX(优胜美地). Mac OSX crypt()函数(在我已经确定的unistd.h中)与Linux中的gcc / gnu不同.我在Linux和Mac OSX上有测试程序,如果使用printf显示结果,crypt()c-library函数会显示34个字符的字符串. Mac OSX上的相同代码仅显示13个字符串.一些研究表明,差异显然是Linux crypt()库例程使用可能不同的加密算法从gnu / gcc Linux端的较长向量生成哈希.一些信息还表明Apple Mac OSX c-library crypt()函数仅使用DES来加密原始字符串加上salt. Apple Mac OSX是否有适当的crypt()函数,等同于gnu / gcc Linux版本,可能在某些开源加密库中? 或者在Mac OSX开发工具中的某个地方是否有适用于Apple Mac OSX的gnu / gcc等效crypt(3)功能? (我是Mac OSX的新手).我正在使用clang编译器,从Apple下载的Xcode东西的一部分,当前用于Yosemite 10.10.5,我猜我不是第一个遇到这种异常的人. Thanx任何信息. 啊.只是一点编辑: (***第二次编辑注意:这很有趣.DES很差,但MD5可以在Kali Linux中使用“hashcat”破解?建议明显转到SHA512.学术测试/验证的详细信息.MD5破解是这里:https://uwnthesis.wordpress.com/2013/08/07/kali-how-to-crack-passwords-using-hashcat/不过,我的问题仍然存在.是否有适用于Mac OSX的MD5 crypt(3)功能?Thx.) (请原谅我对协议的无知.Mac OS X LLVM /基于gcc的crypt()函数是borked垃圾,硬连线只使用DES,一个经过验证的易碎哈希,比MD5差.(用盐字符串称为$6 $,你会得到一个13 char DES哈希.令人难以置信!)我发现了很多方法可以在Linux平台(perl,python等)上正确创建密码哈希(即MD5和SHA512).它们通常使用“crypt” lib(在Linux上使用gcc中的“-lcrypt”选项使用同一个),或者使用python的“passlib”.但我的MacBook,刚刚更新到Yosemite 10.10.5甚至没有“passlib”!(我的旧Fedora盒子运行Python 2.5.1,当前的CentOS框运行Python 2.6.6.令人讨厌的小Macbook使用“python –version”命令表示Python 2.7.10.我在“ServerFault”网站上找到了这篇优秀的帖子: 第一个python和perl脚本在Linux上工作,因为他们正在使用glibc crypt(),我猜,但是没有“passlib.hash”似乎存在于任何地方,Linux或Mac OS X. 我怎么能在这台MacBook上创建一个像样的密码哈希呢?我是一个Mac OS X菜鸟,因为我已经确认Apple在其.plist文件中使用SHA512密码哈希,我确信这个功能必须存在于这个奇怪(但可爱)的外星硬件上.如果一个人好奇,你可以输入这个以在Yosemite上看到你的“ShadowHashData”,从终端的cmd行:(对不起,忘了参考这个,发现它搜索的最后一点,真的很有帮助)
所以看起来Darwin / Yosemite正在使用ok加密.我阅读了一些有关常见加密内容的Apple文档,但是关于如何调整gcc以实际指向包含这些关键内容的库的信息很少.当我确定如何做到这一点时,我会在这里发布答案. 最佳答案
OS X不会将其crypt函数用于任何事情.它具有与POSIX的兼容性,POSIX没有定义它的工作方式,并且不同的平台多年来已经构建了不同的解决方案. Linux并不是特别“正确”,它只是另一个供应商特定的解决方案. Apple解释了他们在crypt中的crypt的基本原理(1):
如果您需要跨平台密码哈希,那么您需要使用已知算法实现它,而crypt不提供.一般来说,这意味着您将需要生成自己的格式,因为实际上没有标准格式.我建议使用PBKDF2而不仅仅是盐渍SHA2,因为它包括拉伸和盐渍.使用John the Ripper破解弱SHA512密码仍然非常快速和简单.通过良好的拉伸,甚至可以保护相当弱的密码. (从Linux的crypt的描述中,他们似乎做了类似于PKBDF2的事情;可能完全没有命名它的PBKDF2.)类似的算法包括scrypt和bcrypt.我喜欢PBKDF2,因为它无处不在并且被NIST推荐(即使有非常合理的bcrypt和scrypt更强的论据. PKBDF2的部分并不是那么复杂,并且在C中使用许可许可证有一些很好的实现.有关具有MIT许可证的简单ANSI C中所需的所有部分的示例,请参见MGCryptor.特别注意 PBKDF2在许多平台和语言上广泛使用. OS X通过Common Crypto提供它. 您当然可以使用Common Crypto实现您自己的Linux加密版本.但除非您打算使用兼容许可,否则您必须非常小心,不要在此过程中复制任何(L)GPL代码.就个人而言,我会构建一个基于PBKDF2的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |