Недостаточно знать алгоритм RC2; вам также необходимо согласовать режим работы и схему заполнения для некоторых режимов. Командная строка OpenSSL (и, по большей части, API EVP) по умолчанию использует режим CBC и заполнение PKCS5 (технически PKCS7), что может быть правильным, а может и нет.
openssl enc
по умолчанию выполняет шифрование и дешифрование на основе пароля , что означает фактический ключ и IV (за исключением ECB, у которого нет IV), используемые для шифры получены с помощью процесса хеширования , называемого функцией вывода ключа на основе пароля (PBKDF), и нестандартный для загрузки; любой аргумент, который вы даете как -iv
, игнорируется - что хорошо, потому что указанный вами аргумент в любом случае недействителен, см. ниже. OpenSSL PBKDF (как и другие лучшие) использует случайную «соль», которая должна храниться в формате, специфичном для OpenSSL, в начале зашифрованного текста, и отсутствие этой соли вызывает ваше сообщение об ошибке bad magic number
. Подробнее см. https://crypto.stackexchange.com/questions/3298/is-there-a-standard-for-openssl-interoperable-aes-encryption/35614#35614 .
Поскольку у вас есть ключ, НЕ пароль и IV, преобразуйте их оба в шестнадцатеричный (не base64) и используйте:
openssl enc -base64 -d -rc2[-mode] -K $key_in_hex -iv $iv_in_hex
# note that's -K uppercase not -k lowercase
# you can use -a as a synonym for -base64
# For a block mode like CBC if standard PKCS5/7 padding wasn't used
# add -nopad and handle the last few bytes manually as needed.
# If your input is more than 76 chars per line (as your Q showed)
# and OpenSSL version before 1.1.0 you also need -A (uppercase).
Есть много способов преобразовать base64 в шестнадцатеричный, но удобный вариант:
somevar=$( echo some_base64 | openssl base64 -d | xxd -p )
# xxd -p outputs only the hex with no labels or ASCII etc
# and thus is suitable as an argument to openssl enc
# without any processing by tools like sed, tr, awk
подстановка команд заключена в двойные кавычки в (t) csh (который вы, кажется, используете), как в оболочках типа Борна.
Итак, в:
alias search "find `pwd` -name "
Вы фактически делаете что-то вроде:
alias search 'find /some/dir -name '
Где / some / dir
был текущим каталогом на момент выполнения команды alias
.
Здесь вы хотите:
alias search 'find $cwd:q -name'
$ cwd
автоматически устанавливается tcsh
(как и $ PWD
в современных версиях, например, в оболочках POSIX), поэтому вы можно использовать его вместо менее эффективного и менее надежного `pwd`
.
Мы используем одинарные (строгие) кавычки, чтобы $ cwd
не раскрывались внутри.
$ cwd: q
- передать значение переменной как один аргумент, а не позволить ему разделиться.
Также обратите внимание, что вам не нужен пробел после -name
выше.
Если вы хотите использовать pwd
(например, чтобы получить канонический (без символьных ссылок) путь к текущему рабочему каталогу, как в некоторых реализациях pwd
, таких как GNU) когда POSIXLY_CORRECT
не находится в среде), вы должны использовать:
alias search 'find "`pwd`" -name'
Хотя это не сработает, если путь к текущему каталогу содержит символы новой строки.
Обратите внимание, что вы не можете использовать sudo search
, поскольку псевдонимы раскрываются только в позиции команды в (t) csh. В оболочках POSIX вы можете:
alias sudo='sudo '
Сообщать оболочке, что слово, следующее за sudo
, также должно подвергаться расширению псевдонима, но этот трюк не работает в (t) csh.
Эквивалент POSIX sh
(или bash
/ zsh
/ ksh
...) будет иметь следующий вид:
alias search='find "$PWD" -name'
-121) --- 57925- Он подключается к работающему экземпляру Firefox на том же дисплее X и просит его просто открыть новое окно.
Такое же поведение наблюдается при попытке запустить Firefox под ssh -Y
(даже на другом хосте). (Однако по какой-то причине не под su - SOME_USER
. Это загадка для меня.)
Это поведение можно отключить с помощью параметра:
firefox --new-instance