Василий Петров: так на той стороне, где формируете подпись и посылаете, тоже должны поменять порядок. Если это от какого-то стороннего приложения или сервиса, и поменять порядок там не удастся - то придётся мириться с тем, что label легко подделать, и особо не доверять этому параметру. Остальные параметры (находящиеся до secret) подделать не получится, не зная секрета.
Владимир Крауз: никак, его нет в заголовках. Пока не получишь пустую строку, разделяющую между собой поля multipart/form-data, не сможешь узнать размер отдельного поля. Можно заранее размер подложить в одно из полей, если сам управляешь на клиенте пересылаемыми данными. Но не доверять этому размеру, так как клиент может что угодно послать.
А если так, как я понимаю, получается вот так:
М1 * П1 + М2 * П2 + М3 * П3 = П
М1 + М2 + М3 = М
Система уравнений с тремя неизвестными, но только двумя уравнениями. Слишком мало уравнений получается, вариантов решения может быть много.
Хотя с другой стороны, в целых числах может быть и одно решение.
При генерации входных данных тщательно проверяйте, чтобы целочисленное решение было одно.
Nikita Schipilov: а если count сохранять туда же в localStorage, под именем note_count к примеру? А при чтении не забывать, что она может быть и не установлена первоначально.