AppleScript и MD5 - PullRequest
       56

AppleScript и MD5

2 голосов
/ 19 мая 2011

Я просто пытаюсь вычислить MD5 строки, используя AppleScript:

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

В приведенном выше коде я фактически заменил строку, переданную в shell, в качестве теста на "hi" Отчеты AppleScript:

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

Выполнение той же команды непосредственно в терминале приводит к:

% echo -n hi | md5
49f68a5c8493ec2c0bf489821c21fc3b

Хотя команда идентична, вычисляемый хеш отличается. Очевидно, что в AppleScript передаются дополнительные символы, но я не могу понять, что это такое. Я ценю любое руководство.

Ответы [ 3 ]

5 голосов
/ 20 мая 2011

Вы можете увидеть, что происходит, если уберете | md5. В случае AppleScript вы увидите -n hi как вывод. Это потому, что POSIX sh echo, который вызывается do shell script, не поддерживает -n, тогда как встроенные команды bash или csh echo или команда /bin/echo все поддерживают -n .

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

См. Справочную страницу Mac OS X echo или документацию POSIX для echo для получения дополнительной информации. Обратите внимание, что для соответствия POSIX требуется , чтобы соответствующие реализации echo должны не поддерживали любые опции, включая -n; для совместимости между оболочками и системами редакторы POSIX предлагают использовать printf для таких вещей, как подавление перевода строки.

tell current application
    do shell script "printf '%s' hi | md5"
end tell
--> "49f68a5c8493ec2c0bf489821c21fc3b"
1 голос
/ 20 мая 2011

Если вы отбросите -n из команды echo, то она должна работать нормально. Не совсем уверен, почему ... но это, кажется, это исправить!

0 голосов
/ 20 мая 2011

это работает

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

это результат и то же самое как

 echo -n hi | md5 

из командной строки

...