/ / Генериране на базово кодирано SHA512 дайджест за файл (или набор от файлове) - bash, openssl, base64, sha512, blackberry

Генериране на кодиран SH6400 кодиран SHA512 за файл (или набор от файлове) - bash, openssl, base64, sha512, blackberry-playbook

Най- BlackBerry WebWorks SDK за Tablet OS инструмент за изграждане генерира архив, който съдържафайлове и MANIFEST.MF с вписване за всеки файл и даунлоуд SHA512, кодиран в base64. Въпреки това, има грешка, която твърде много файлове в изграждането ще доведе до грешка при изграждането. Опитвам се да разбера как да генерирам същата информация.

Примерът по-долу идва от MANIFEST.MF и съдържа името на файла и дайджеста. Въпреки това, вариантът base64 използва _ вместо / и - вместо + и няма следа == за подплата.

Archive-Asset-Name: air/XX/IMG_0999.jpg
Archive-Asset-SHA-512-Digest: YI_KXWjpJwwsi5MDQPeBQc9SVi-bH6zYq5PgBD3jQiqHu-r-5Hv8A0yh_y5j2T9MpYZ5TVMW4JXHSXNYmpV1tA

Работя с Windows 7, но имам инсталиран GIT, така че имам MINGW32 като bash shell. Намерих тази комбинация от команди на openssl и tr, но изглежда малко на kludge.

openssl dgst -sha512 -binary IMG_0999.gif | openssl enc -base64 | tr "+" "-" | tr "/" "_" | tr -d "=" | tr -d "n"

Има ли по-добър начин за генериране на този сборник?

Накрая ще трябва да направя за всички изображенияв дърво на директории. Надявах се на сценарий, вместо да се налага да пиша програма. Вторият въпрос е как да генерираме явен синтаксис за всички файлове в директория (рекурсивно). Ще бъде ли това баш скрипт, обхващащ горната команда? Всички указатели тук са оценени, тъй като аз не съм написал скрипт преди.

Отговори:

1 за отговор № 1

Можете да съкратите командата си, като комбинирате някои неща:

openssl dgst -sha512 -binary IMG_0999.gif | openssl enc -base64 | tr "+/" "-_" | tr -d "=n"

За всички файлове в едно дърво, нещо като:

find . -type f -name "*.gif" -print0 | xargs -0 -I % sh -c "openssl dgst -sha512 -binary "$(basename "$1")" | openssl enc -base64 | tr "+/" "-_" | tr -d "=n" > "$1.sum"" _ $1

1 за отговор № 2

Решението на Денис Уилямсън ме накара да отида, но не tr версия (2.0), която е инсталирана, хареса този синтаксис с няколко знака. Също така xargs версия (4.1) не хареса -I опция. Въпреки това, започнах да го правя и това е важно. Ето какво завърших с:

find . -type f -name "*.gif" -print0 | xargs -0 --replace=% sh -c "echo -e "Archive-Asset-Name: %nArchive-Asset-SHA-512-Digest: `openssl dgst -sha512 -binary % | openssl enc -base64 | tr "+" "-" | tr "/" "_" | tr -d "=" | tr -d "n"`n""

и които генерират следното (имената на изображенията са променени, за да защитят невинните)

Archive-Asset-Name: ./IMG_0001.gif
Archive-Asset-SHA-512-Digest: AsgQnXYxj07qy-DTlzqYEv3v1UNqbr1sp5kVz0PE8FYwD-q_0VM20Wyci3xunJwdqy59MbyIX1GGtSmhuETUHQ

Archive-Asset-Name: ./IMG_0032.gif
Archive-Asset-SHA-512-Digest: JE3lmvXxOjSpDoUjyvAp92E1T4b8AQGGJBCcBz_1AG2eoBoSRH76LHpWPEUAeXFx_kOqEaDMRGPrpYnlfcnz9g

Archive-Asset-Name: ./IMG_0003.gif
Archive-Asset-SHA-512-Digest: bJJQ-j-s9630FzUh3hP50h7gWYqJQ6o0FP37nUuSeSUmerFxBwR2X0VeTYn-h4cf7szUr4fqDfAKQLOK0gt7zA

Аз все още трябва да ощипвам името, за да не бъде с представка ./ но това е за друг ден.