Попробуйте этот ( Shellcheck -clean) код:
#! /bin/bash
shopt -s nullglob # Globs that match nothing expand to nothing
shopt -s globstar # ** matches multiple directory levels
root_webp_dir=/var/www/themes/assets/images/webp
for jpg_path in **/*.jpg ; do
jpg_file=${jpg_path##*/}
[[ $jpg_path == */* ]] && jpg_dir=${jpg_path%/*} || jpg_dir=.
webp_dir=${root_webp_dir}/${jpg_dir}
webp_path=${webp_dir}/${jpg_file%.jpg}.webp
[[ -d $webp_dir ]] || mkdir -p -- "$webp_dir"
cwebp -q 100 "$jpg_path" -o "$webp_path"
done
Обратите внимание, что версия cwebp
, которую я использовал для тестирования (тупо), не поддерживает --
] соглашение о завершении параметров командной строки. В противном случае команда была бы (и должна быть) cwebp -q 100 -o "$webp_path" -- "$jpg_path"
. Команда в коде выше может пойти не так, если какой-либо из файлов JPEG имеет путь, который начинается с -
. Один из способов обойти проблему и сделать код полностью безопасным - использовать ./**/*.jpg
вместо **/*.jpg
в качестве шаблона для поиска файлов JPEG.
Кажется, что Python вставляет маркер порядка байтов при преобразовании строки UTF16 в двоичный файл. Массив байтов.NET не содержит BOM, таким образом, я сделал некоторый Python гетто, который превращает UTF16 в шестнадцатеричное число, удаляет первые 4 символа, затем декодирует его к двоичному файлу.
Может быть лучший способ сорвать BOM, но это работает на меня!
Вот тот, который передает:
import hashlib
from base64 import b64decode, b64encode
def utf16tobin(s):
return s.encode('hex')[4:].decode('hex')
b64salt = "kDP0Py2QwEdJYtUX9cJABg=="
b64hash = "OJF6H4KdxFLgLu+oTDNFodCEfMA="
binsalt = b64decode(b64salt)
password_string = 'password'.encode("utf16")
password_string = utf16tobin(password_string)
m1 = hashlib.sha1()
# Pass in salt
m1.update(binsalt + password_string)
# Pass in password
# B64 encode the binary digest
if b64encode(m1.digest()) == b64hash:
print "Logged in!"
else:
print "Didn't match"
print b64hash
print b64encode(m1.digest())
Две мысли относительно того, что могло идти не так, как надо.
Сначала код от отражения имеет три пути:
Как Вы знаете, что хешируете пароль и не шифруете пароль с этим. EncryptPassword ()? Вы, возможно, должны инвертировать EncryptPassword () функция членства и копировать это. Это - то, если у Вас нет некоторой информации, которая гарантирует, что Вы хешируете пароль и не шифруете его.
Второй, если это действительно хеширует пароль, можно хотеть видеть что Кодирование. Unicode. GetBytes () функционируют возвраты для строки "пароль", поскольку можно возвращать что-то как:
0x00 0x70 0x00 0x61 0x00 0x73 0x00 0x73 0x00 0x77 0x00 0x6F 0x00 0x72 0x00 0x64
вместо:
0x70 0x61 0x73 0x73 0x77 0x6F 0x72 0x64
Я надеюсь, что это помогает.