簡體   English   中英

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

[英]How to get same crypt(3) function in Mac OS X as Linux gcc/gnu crypt(3)? Linux gcc crypt(3) has MD5 and SHA512. Apple Gcc crypt(3) *only* uses 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個字符的結果。 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)功能?? 謝謝。)

(請原諒我對協議的無知.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 /問題/ 330069 /如何到創建-AN-SHA-512散列密碼換影?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/<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中的crypt的基本原理(1):

該庫(FreeSec 1.0)是在美國境外開發的,作為僅限美國的libcrypt加密庫的無阻礙替代品。 只有當crypt()僅用於驗證目的並且避免使用上面列出的其他程序員接口時,才能從美國導出與crypt()接口鏈接的程序。 庫中已經特別小心,因此只使用crypt()接口的程序不會引入其他組件。

如果您需要跨平台密碼哈希,那么您需要使用已知算法實現它,而crypt不提供。 一般來說,這意味着您將需要生成自己的格式,因為實際上沒有標准格式。 我建議使用PBKDF2而不僅僅是鹽漬SHA2,因為它包括拉伸和鹽漬。 使用John the Ripper破解弱的SHA512密碼仍然非常快速和簡單。 通過良好的拉伸,甚至可以保護相當弱的密碼。 (根據Linux的crypt的描述,他們似乎做了類似於PKBDF2的事情;可能完全沒有命名它的PBKDF2。)類似的算法包括scryptbcrypt 我喜歡PBKDF2因為它無處不在並且被NIST推薦(即使有非常合理的論據認為bcrypt和scrypt更強)。

PKBDF2的部分並不是那么復雜,並且在C中使用許可許可證有一些很好的實現。 有關一個示例,請參閱MGCryptor ,其中包含使用MIT許可證的簡單ANSI C中所需的所有部分。 特別pkcs5_pbkdf2() ,這可能正是你想要的。

PBKDF2在許多平台和語言上廣泛使用。 OS X通過Common Crypto提供它。

您當然可以使用Common Crypto實現您自己的Linux crypt版本。 但除非您打算使用兼容許可,否則您必須非常小心,不要在此過程中復制任何(L)GPL代碼。 就個人而言,我會構建一個基於PBKDF2的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM