- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在将一些 C 代码从 Linux 迁移到 Mac OSX (yosemite)。 Mac OSX crypt() 函数(在 unistd.h 中,正如我所确定的)与 Linux 中的 gcc/gnu 不同。我在 Linux 和 Mac OSX 上有测试程序,如果使用 printf 显示结果,crypt() c-library 函数会显示一个 34 个字符的字符串。 Mac OSX 上的相同代码仅显示 13 个字符的字符串。一些研究表明,区别显然是 Linux crypt() 库例程从 gnu/gcc Linux 端的较长 vector 生成哈希,可能使用不同的加密算法。一些信息还表明,Apple Mac OSX c-library crypt() 函数仅使用 DES 来加密原始字符串和盐。我想让我的测试代码在 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,我猜我不是第一个遇到这种异常的人。感谢您提供任何信息。
啊。只是一点点编辑:Apple MacOSX 的东西使用 DES 算法,因此在检查散列时得到 13 个字符的结果。 Gnu/gcc 使用 MD5 算法,因此产生 34 个字符的散列。这在这里解释: 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) 函数?谢谢。)
(请原谅我对协议(protocol)的等级无知。基于 Mac OS X LLVM/gcc 的 crypt() 函数是无聊的垃圾,硬连接到仅使用 DES,一种经过验证的易碎散列,比 MD5 更糟糕。(用 $6$ 的盐字符串调用它,你会得到一个 13 个字符的 DES 散列。难以置信!)我发现了许多在 Linux 平台(perl、python 等)上正确创建密码散列(即 MD5 和 SHA512)的方法.) 他们通常使用“crypt”库(与在 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 密码哈希,我确信这种功能必须存在于这个奇怪(但可爱)的外星硬件的某个地方。如果有人好奇,您可以在终端的 cmd 行中输入此内容以查看 Yosemite 上的“ShadowHashData”:(抱歉,忘记了引用资料,昨晚搜索时发现它,真的很有帮助)
sudo defaults read /var/db/dslocal/nodes/Default/users/<yourusername>.plist ShadowHashData | tr -dc 0-9a-f | xxd -r -p | plutil -convert xml1 - -o -
所以看起来 Darwin/Yosemite 使用的是 ok 加密。我阅读了一些关于常见加密内容的 Apple 文档,但是关于如何调整 gcc 以实际指向包含这些关键内容的库的信息很少。当我确定如何做到这一点时,我会在此处发布答案。
最佳答案
OS X 不使用它的 crypt
函数做任何事。它具有与 POSIX 的兼容性,POSIX 没有定义其工作方式,多年来不同的平台构建了不同的解决方案。 Linux 并不是特别“正确”,它只是另一种特定于供应商的解决方案。 Apple 解释了他们在 crypt(1) 中使用 crypt
的基本原理:
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,因为它包括拉伸(stretch)和加盐。使用 John the Ripper 破解弱 SHA512 密码仍然非常快速和容易。通过良好的扩展,即使是相当弱的密码也可以得到保护。 (从 Linux 的 crypt
的描述来看,他们似乎在做类似于 PKBDF2 的事情;可能正是 PBKDF2 而没有命名它。)类似的算法包括 scrypt和 bcrypt .我喜欢 PBKDF2,因为它无处不在并且被 NIST 推荐(尽管有非常合理的论据认为 bcrypt 和 scrypt 更强大)。
PKBDF2 的各个部分并没有那么复杂,并且在 C 语言中有一些您需要的部分的良好实现以及许可。参见 MGCryptor对于一个示例,它包含您在具有 MIT 许可证的简单 ANSI C 中需要的所有部分。具体看pkcs5_pbkdf2()
这可能正是您想要的。
PBKDF2 在许多平台和语言上广泛可用。 OS X 通过 Common Crypto 提供它。
您当然也可以使用 Common Crypto 实现您自己的 Linux 版本 crypt
。但是您必须非常小心,不要在此过程中复制任何 (L)GPL 代码,除非您打算使用兼容的许可证。就个人而言,我会构建一个基于 PBKDF2 的解决方案。
关于c - 如何在 Mac OS X 中获得与 Linux gcc/gnu crypt(3) 相同的 crypt(3) 函数? Linux gcc crypt(3) 有 MD5 和 SHA512。 Apple Gcc crypt(3) *仅* 使用 DES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32569597/
我正在为我的雇主编写脚本,以从他们自己的站点获取某些数据。出于一长串原因,我需要从网站上获取数据,如图所示。我发现,其中一些数据是通过 js 调用检索的... 回想起来,我应该选择 Mechanize
我正在使用 python 和 cryptography.io 来签署和验证消息。我可以通过以下方式获得签名的 DER 编码字节表示: cryptography_priv_key.sign(messag
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
是否可以区分 ECDF?以下面得到的为例。 set.seed(1) a <- sort(rnorm(100)) b <- ecdf(a) plot(b) 我想对 b 求导以获得它的概率密度函数 (PD
我找到了如何从 navigator.mimeTypes 获取 mimetypes: function GetMimeTypes() { var message = ""; var mi
我在表单中使用单选按钮来隐藏/显示联系人表单中的成员 ID 字段。问题是,当 javascript 更改 html 中包含的隐藏 id 字段(该字段设置为“无”值)时,该字段将不再通过 post 可用
我正在做单元测试。我必须测试所有可能的if..else情况。但是在此if语句中: int32_t i32Res = snprintf(buffer, len, "The%d_String_%d", 0
我有一个 Facebook 应用程序,我想从中获取“喜欢”的总数。我想知道这是否可能。 其中 ID 是应用程序的 ID,ACCESS_TOKEN 是我尝试过的应用程序的当前访问 token : gra
如果我有多个计算实例尝试同时获取同一个 blob 的租约,则似乎经常会成功。我的印象是,一旦租约发出(并因此被客户获得),就不可能同时发出另一个租约? 我希望情况确实如此,我一直在 Azure 中使用
这是我的索引 POST /blogs/1 { "name" : "learn java", "popularity" : 100 } POST /blogs/2 { "name" : "l
我正在将 Symfony2 与 FOSUserBundle 一起使用。我需要为用户获得最高角色。 role_hierarchy: ROLE_CONTRIBUTOR: ROLE_USER
我正在向服务器发送基于 REST 的请求。我希望尽快得到答复,并希望了解可以进行的各种优化。 一种方法当然是在线程中并行发送这些请求。还有哪些其他选项可用于优化此功能? 在服务器上,可以添加哪些配置?
这可能是某种重复的问题,但我似乎找不到合适的解决方案。我正在使用 git4idea.history.GitHistoryUtils.history() 获取提交列表。如果 checkout 其中一个较
我正在做一个程序,可以输入每周的工资和那一周的总工作时间。它应该以小时工资率显示答案。但是我无法显示正确的“centavos/2 decimal places”公式并且它不想使用 float % fl
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我已经尝试了 mContext.getMainLooper() 和 Looper.getMainLooper()。两者都返回相同的结果,但我想知道哪种方法正确? 我还从 Android 开发人员链接中
我有一个“affiliates”表,其中包含“user”和“referredBy”列。 给定一个用户,我希望获得该用户推荐的所有“n 级”玩家。对于 n=1,我们只关心您直接推荐的玩家数量: SELE
我在 PostgreSQL 9.5 数据库中有两个表: project - id - name task - id - project_id - name - updated_
请帮助我怎样才能得到我预期的结果,在此先感谢并抱歉我的英语不好。 PHP: $dog = implode(',', $data['dogbreed']); $query .= "AND `do
我有 let impulse = CGVectorMake(CGFloat(Constants.impulse), 0) 如何在不创建另一个 CGVector 的情况下得到它的负值? 我正在考虑在 C
我是一名优秀的程序员,十分优秀!