如何在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的解决方案.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具
文章浏览阅读3.5k次,点赞7次,收藏24次。本地部署和使用llama.cpp进行量化Llama2,linux和Windows平台方案,支持CPU和GPU多版本。_llama cpp gpu
文章浏览阅读1.4k次,点赞46次,收藏44次。在vim中,最为常见的有三种模式,分别是:命令模式(command mode)、插 入模式(Insert mode)和底行模式(last line mode)文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+: 即可进入该模 式。在进入vim后,使用 i 进入插入模式,插入模式就是vim的编辑模式,可以在vim中进行内容的编辑和修改。vim的核心模式,使用vim进入文件编辑时的最初模式,在该模式中只能移动光标和使用命令对文件内容进行编辑。
Linux常用命令大全,包括目录操作命令和文件操作命令,以及查看登录用户命令和文件内容查看命令等。
文章浏览阅读1.7k次,点赞57次,收藏50次。Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用.本地部署,注重隐私,简单高效的MYSQL审计平台。下面介绍Linux 简单部署Yearning 并结合cpolar 内网穿透工具实现远程访问,破除访问限制,提高工作效率!!
文章浏览阅读1.9w次,点赞7次,收藏18次。Microsoft Edge是一款现代化的浏览器,它拥有众多功能和强大的性能,为用户带来更加流畅的浏览体验。Edge最近推出了分屏功能,支持一个窗口同时显示两个选项卡,这可以大大提高生产力和多任务处理能力。欢迎大家使用分屏及其他新功能后分享自己的使用心得与建议。首先,使用Microsoft Edge的分屏功能确实能够提高生产力,尤其是在需要同时浏览两个不同网页的情况下。分屏功能使得在一个窗口中同时显示两个选项卡,用户可以在两个网页之间快速切换,而无需打开新的窗口或使用多个浏览器窗口。_edge linux
文章浏览阅读1.8k次,点赞83次,收藏71次。C语言实现倒计时和进度条并进行演示。_linux不换行输出倒计时
文章浏览阅读1.5k次,点赞28次,收藏25次。基于嘉立创泰山派开发板,本机使用VMware+Unbuntu,编译泰山派的Linux SDK。详细教程,0基础小白可操作!内涵大量基础操作和linux基本知识。_立创泰山派sdk编译