2011-05-19 80 views
2

我只是想使用AppleScript來計算字符串的MD5:的AppleScript和MD5

set hash_string to do shell script "echo -n hi | md5" 

在上面的代碼中,我實際上已經取代通過與「喜」殼作爲測試串。 AppleScript的報道:

tell current application 
    do shell script "echo -n hi | md5" 
     --> "5ea3a74c5a5c60abd09da8c5f85fa0a5" 
end tell 

直接運行相同的命令在終端的結果:

% echo -n hi | md5 
49f68a5c8493ec2c0bf489821c21fc3b 

雖然命令是相同的,所計算的哈希是不同的。顯然,在AppleScript中傳遞了額外的字符,但我似乎無法弄清楚它們是什麼。我很欣賞任何指導。

回答

0

這個作品

set passwordPlain to "hi" 
set foo to do shell script "/sbin/md5 -qs" & passwordPlain 
return foo 

這個結果與同爲

echo -n hi | md5 

從命令提示符

+0

作品!感謝你能這麼快回復。 – JJWeb 2011-05-19 20:22:50

+0

@JJWeb歡迎您的幫助 – mcgrailm 2011-05-19 20:25:26

5

你可以看到發生了什麼,如果你刪除| md5。在AppleScript的情況下,你會看到-n hi作爲輸出。這是因爲POSIX shecho,這是由do shell script調用,不支持-nbashcshecho建宏或/bin/echo命令所有不支持-n

$ bash 
$ echo -n hi 
hi$ sh 
$ echo -n hi 
-n hi 

Mac OS X echo man pagePOSIX documentation for echo獲取更多信息。請注意,POSIX合規性要求合規執行的echo必須而不是支持任何選項,包括-n;爲了兼容shell和系統,POSIX編輯建議使用printf來執行壓縮換行符等操作。

tell current application 
    do shell script "printf '%s' hi | md5" 
end tell 
--> "49f68a5c8493ec2c0bf489821c21fc3b" 
+0

非常感謝。這是完全合理的。 – JJWeb 2011-05-19 20:22:32

+1

很高興幫助。順便說一句,歡迎來到SO。如果您在此提出問題,則預計您會將答案標記爲已接受或修改您的問題,直到您獲得可接受的答案。 – 2011-05-19 20:28:20

1

如果從echo命令中刪除-n,那麼它應該可以正常工作。不完全確定爲什麼...但似乎解決它!

+0

我看不到這個工作 – mcgrailm 2011-05-19 20:12:45

+0

http://i.imgur.com/2tCyF.png爲什麼不呢? – 2011-05-19 20:16:11

+0

我一定弄錯了東西,但是我看到它工作 – mcgrailm 2011-05-19 20:21:44