1 (изменено: VitAliS, 2013-08-20 08:47:19)

Тема: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Может быть было где-то здесь уже, но по  крайней мере я не нашел.

Иногда нужно файл закодировать в текстовый вид при помощи кодировки base64, или наоборот раскодировать.

Раньше для этого я использовал утилиту base64.exe или Total Commander
Но проблема в том, что это сторонние инструменты.

Оказывается можно обойтись средствами ОС.
Есть в составе ОС Windows утилита certutil.exe предназначенная для работы с сертификатами.
Так вот, при помощи этой утилиты и можно кодировать/декодировать в/из base64 любые файлы. Для этого используются ключи -encode и -decode соответственно.

Пример:
Имеем текстовый файл file.txt с текстом: "Hello, world!"

certutil.exe -encode file.txt file.b64

на выходе имеем файл file.b64:


-----BEGIN CERTIFICATE-----
SABlAGwAbABvACwAIAB3AG8AcgBsAGQAIQANAAoA
-----END CERTIFICATE-----

В общем как-то так
Век живи, век учись

2 (изменено: Serge Yolkin, 2013-08-21 00:08:54)

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Ага. Она ещё и хэш SHA1 считать умеет...

P.S. И не только SHA1, ещё и SHA256, SHA384, SHA512, MD2, MD4, MD5, но параметр HashAlgorithm обязательно должен быть в ВЕРХНЕМ РЕГИСТРЕ.

3

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

VitAliS пишет:

Есть в составе ОС Windows утилита certutil.exe

На XP SP3 по умолчанию нет.

VitAliS пишет:

или Total Commander
Но проблема в том, что это сторонние инструменты.

Сторонние, но использовать тот же ТС только для этих целей (или как у некоторых - для FTP) - какое-то сомнительное по КПД занятие.

base64.exe, кстати, есть в двух вариантах. Плюс есть скриптовые решения. Я же периодически обращаюсь к UUDeview.

4

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Flasher пишет:

На XP SP3 по умолчанию нет.

Есть в Windows 7 Pro, Server 2003 R2 Standard, Server 2008 R2 Standard, Server 2008 R2 Foundation;
По идее должна быть в Vista, 8, Server 2008/2012 Standart;
И всё-таки XP уже является устаревшей и неподдерживаемой ОС.

base64.exe, кстати, есть в двух вариантах. Плюс есть скриптовые решения. Я же периодически обращаюсь к UUDeview.

Минусы скриптовых решений - невысокая скорость работы. Бывают ситуации из разряда "обработать mbox/maildir объёмом в 2-3 ГБайт, возможно даже не один" - натравил VBS'ник и идешь скрашивать ожидание к девушкам, в соседнюю комнатушку. Сколько памяти "скушает" такой VBS, если "слепить" из него аналог ripmime - ужас!

5

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

… и неподдерживаемой ОС.

Да ну .

Минусы скриптовых решений - невысокая скорость работы.

Да бросьте. Не ручками же считаем.

6

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

UNDYING пишет:

И всё-таки XP уже является устаревшей и неподдерживаемой ОС.

Устаревшая, но активно используемая, а значит пренебрегать ей как минимум нелогично. Поддержка заканчивается только 8 апреля следующего года. Я же вообще живу без апдейтов и не имею проблем.

UNDYING пишет:

Бывают ситуации из разряда "обработать mbox/maildir объёмом в 2-3 ГБайт, возможно даже не один" - натравил VBS'ник и идешь скрашивать ожидание к девушкам, в соседнюю комнатушку.

Сперва предлагаю опробовать. И раз речь о скриптах, то и цитату следовало бы приводить только с ними и без утилит, которые тоже в моих скриптах активно участвуют. Одно другому не мешает.

7

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Flasher пишет:

На XP SP3 по умолчанию нет.

Согласен. Маленько ошибся.
Но эта утилита входит в Administrator Kit, который у меня всегда априори установлен, поэтому я и посчитал ее частью ОС

Flasher пишет:

но использовать тот же ТС только для этих целей (или как у некоторых - для FTP) - какое-то сомнительное по КПД занятие

Ну, вообще TC использовался не только для этих целей, просто в нем есть этот функционал

8

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Вообще утилита кривоватая какая-то:
-- SHA1 пустого файла считать не умеет
-- SHA1 выводит дамп а не строкой. Сравните (sha1sum - утилита с аналогичным функционалом в unix)


echo.>file1
sha1sum file1
certutil -hashfile file1

-- отсутствует система в использовании параметров командной строки: то требует выходной файл, то не требует


CertUtil [Options] -hashfile InFile
CertUtil [Options] -encode InFile OutFile

-- обязательность выходного файла напрягает. Странно, что они не сделали обычный вывод в STDOUT.
-- избыточные сообщения в случае успешного выполнения команды и бессмысленные сообщения об ошибках.
-- "пугливая" программа - боится перезаписать существующий файл.

( 2 * b ) || ! ( 2 * b )

9

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Serge Yolkin пишет:

Ага. Она ещё и хэш SHA1 считать умеет...

P.S. И не только SHA1, ещё и SHA256, SHA384, SHA512, MD2, MD4, MD5, но параметр HashAlgorithm обязательно должен быть в ВЕРХНЕМ РЕГИСТРЕ.

Покажите, пожалуйста, примеры вычислений сумм SHA256, SHA384, SHA512, MD2, MD4, MD5.

( 2 * b ) || ! ( 2 * b )

10

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Rumata, для Вас - всегда пожалуйста

11

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Serge Yolkin
Я видел эту тему и честно пытался выполнить ее как написано в справке. Вот результат:


c:\tmp\zzz>dir /b *
hash2name.wsf

c:\tmp\zzz>echo.>test.txt

c:\tmp\zzz>wscript //job:run hash2name.wsf /MD5 test.txt

c:\tmp\zzz>dir /b *
hash2name.wsf
test.txt

Я проанализировал Ваш скрипт. По сути он - обертка вокруг команды:


certutil -hashfile test.txt MD5

Но эта команда у меня дает ошибку:


c:\tmp\zzz>CertUtil -hashfile "C:\tmp\zzz\test.txt" MD5
Expected no more than 1 args, received 2
CertUtil: Too many arguments

Usage:
  CertUtil [Options] -hashfile InFile
  Generate and display cryptographic hash over a file

Options:
  -gmt              -- Display times as GMT
  -seconds          -- Display times with seconds and milliseconds
  -v                -- Verbose operation
  -privatekey       -- Display private key data

CertUtil -?              -- Display a verb list (command list)
CertUtil -hashfile -?    -- Display help text for the "hashfile" verb
CertUtil -v -?           -- Display all help text for all verbs

Скорее всего мы пользуемся разными версиями программы. В интернете я встречал упоминание о другой версии. Вот моя:

File version: 6.0.6002.18005
Size: 781 KB

А какая у Вас?

( 2 * b ) || ! ( 2 * b )

12

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Судя по формату (и по аналогии с другими продуктами МС) это номер версии ОС, а не файла. У Вас - WinXP. У меня поблизости XP нет... Писал и отлаживал скрипт на 7 (6.2.хххх...), а вчера поставил 8.1 (6.3.9431.0).

13

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Serge Yolkin, Windows XP:

??????????????????????????? Версия файла ???????????????????????????
? Полная версия:         5.2.3790.3959                             ?
? Язык:                  Русский                                   ?
? Описание:              CertUtil.exe                              ?
? Копирайт:              рпорация Майкрософт. Все права защищены.  ?
? Архитектура:           I386                                      ?
????????????????????????????????????????????????????????????????????
? Комментарий:                                                     ?
? Компания:              Microsoft Corporation                     ?
? Версия файла:          .2.3790.3959 (srv03_sp2_rtm.070216-1710)  ?
? Внутреннее имя:        CertUtil.exe                              ?
? Торговая марка:                                                  ?
? Оригинальное имя:      CertUtil.exe                              ?
? Частная сборка:                                                  ?
? Продукт:               Операционная система Microsoft® Windows®  ?
? Версия продукта:       5.2.3790.3959                             ?
? Специальная сборка:                                              ?
????????????????????????????????????????????????????????????????????
?                             { o Да }                             ?
????????????????????????????????????????????????????????????????????

14

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Serge Yolkin пишет:

Судя по формату (и по аналогии с другими продуктами МС) это номер версии ОС, а не файла. У Вас - WinXP. У меня поблизости XP нет... Писал и отлаживал скрипт на 7 (6.2.хххх...), а вчера поставил 8.1 (6.3.9431.0).

Нет. У меня виста.

( 2 * b ) || ! ( 2 * b )

15

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

Чёрт! Про Висту я забыл... Хотя стояла когда-то. Считал обратным отсчётом и Висту пропустил, получилась XP. Прошу прощения.

16

Re: CMD/BAT: Кодирование/декодирование base64 средствами ОС

certutil.exe, на сколько помню, ставится с VS. Последней не пользуюсь (считаю vim лучшей IDE), поэтому утверждать ничего не буду. На счет кодирования. Учитывая, что PowerShell в Win7 имеется по умолчанию, то

[Convert]::ToBase64String((gc $file -enc byte))