Thirding TagLib Sharp.
TagLib.File f = TagLib.File.Create(path);
f.Tag.Album = "New Album Title";
f.Save();
Проблема в том, что mcrypt
не заполняет последний блок, тогда как привязка OpenSSL Ruby использует метод заполнения OpenSSL по умолчанию, то есть заполнение PKCS. Я не могу улучшить описание из документации OpenSSL:
Заполнение PKCS работает путем добавления n отступов байтов значения n, чтобы получить общее длина данных a кратный размеру блока. Заполнение всегда добавляется, поэтому, если данные уже есть кратное размеру блока n будет равны размеру блока. Например, если размер блока 8 и 11 байтов нужно зашифровать, затем 5 байтов заполнения будет добавлено значение 5.
Перед шифрованием вам необходимо вручную добавить соответствующие отступы в конец открытого текста в PHP. Для этого передайте свой $ cleartext
через эту pkcs5_pad
функцию на стороне PHP перед его шифрованием (передавая 16
в качестве размера блока).
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
Если вы также можете пойти другим путем (зашифровать в Ruby и расшифровать с помощью mcrypt), вам придется удалить байты заполнения после дешифрования.
Боковое примечание: Причина, по которой вы должны добавить заполнение, даже если открытый текст уже кратное размеру блока (целый блок заполнения), так что, когда вы расшифровываете, вы знаете, что последний байт последнего блока равен , всегда количеству добавленного заполнения. В противном случае вы не смогли бы