如何在Mac OS X中获得与Linux gcc / gnu crypt(3)相同的crypt(3)功能? Linux gcc crypt(3)有MD5和SHA512. Apple Gcc crypt(3)*仅*使用DES

我正在将一些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.
我想让我的测试代码在Linux和Mac OSX平台上产生相同的结果.

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任何信息.

啊.只是一点编辑:
在检查哈希时,Apple MacOSX的东西正在使用DES算法,因此是13-char结果. Gnu / gcc使用MD5算法,因此产生了34-char的哈希值.这在这里解释:
http://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/crypt.html#crypt
那时我的问题很精致;是否有使用MD5(或SHA512)代替DES的Mac OSX的crypt(3)等效函数

(***第二次编辑注意:这很有趣.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”网站上找到了这篇优秀的帖子:
https://serverfault.com/questions/330069/how-to-create-an-sha-512-hashed-password-for-shadow?newreg=df160746fbcd47878d600cbe76ec8b7f

第一个python和perl脚本在Linux上工作,因为他们正在使用glibc crypt(),我猜,但是没有“passlib.hash”似乎存在于任何地方,Linux或Mac OS X.

我怎么能在这台MacBook上创建一个像样的密码哈希呢?我是一个Mac OS X菜鸟,因为我已经确认Apple在其.plist文件中使用SHA512密码哈希,我确信这个功能必须存在于这个奇怪(但可爱)的外星硬件上.如果一个人好奇,你可以输入这个以在Yosemite上看到你的“ShadowHashData”,从终端的cmd行:(对不起,忘了参考这个,发现它搜索的最后一点,真的很有帮助)

sudo defaults read /var/db/dslocal/nodes/Default/users/

所以看起来Darwin / Yosemite正在使用ok加密.我阅读了一些有关常见加密内容的Apple文档,但是关于如何调整gcc以实际指向包含这些关键内容的库的信息很少.当我确定如何做到这一点时,我会在这里发布答案.

最佳答案
OS X不会将其crypt函数用于任何事情.它具有与POSIX的兼容性,POSIX没有定义它的工作方式,并且不同的平台多年来已经构建了不同的解决方案. Linux并不是特别“正确”,它只是另一个供应商特定的解决方案. Apple解释了他们在crypt中的crypt的基本原理(1):

This library (FreeSec 1.0) was developed outside the United States of America as an unencumbered replacement for the U.S.-only libcrypt encryp-
tion library. Programs linked against the crypt() interface may be exported from the U.S.A. only if they use crypt() solely for authentication
purposes and avoid use of the other programmer interfaces listed above. Special care has been taken in the library so that programs which only
use the crypt() interface do not pull in the other components.

如果您需要跨平台密码哈希,那么您需要使用已知算法实现它,而crypt不提供.一般来说,这意味着您将需要生成自己的格式,因为实际上没有标准格式.我建议使用PBKDF2而不仅仅是盐渍SHA2,因为它包括拉伸和盐渍.使用John the Ripper破解弱SHA512密码仍然非常快速和简单.通过良好的拉伸,甚至可以保护相当弱的密码. (从Linux的crypt的描述中,他们似乎做了类似于PKBDF2的事情;可能完全没有命名它的PBKDF2.)类似的算法包括scryptbcrypt.我喜欢PBKDF2,因为它无处不在并且被NIST推荐(即使有非常合理的bcrypt和scrypt更强的论据.

PKBDF2的部分并不是那么复杂,并且在C中使用许可许可证有一些很好的实现.有关具有MIT许可证的简单ANSI C中所需的所有部分的示例,请参见MGCryptor.特别注意pkcs5_pbkdf2(),这可能正是你想要的.

PBKDF2在许多平台和语言上广泛使用. OS X通过Common Crypto提供它.

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

相关文章

文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件。特点:最新、最快、最准确。 用法:...
非交互式添加分区 方法一 添加/deb/sdb 下的分区,其实位置为1到1000M,第二个分区位置为1001至3000M,...
编译安装httpd 1 去官网下载源码包 为避免非法软件,一定要去官网下载http://www.apache.org httpd-2.4...
gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-mo...
1 一定用快捷键 这里简单的说下几个常用的快捷按键。 1.1 移动光标快捷键 Crtl + a 光标回到命令行...
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径。如果test命令中列出的条件成立...