Меня попросили зашифровать пароль, создав новую процедуру, и я подумал о том, чтобы работать с битами, чтобы изменить каждый символ моего входного ключа на явно не связанные символы, и поэтому я написал эту функцию:
(Я работаю с кодом PHP):
function CBS($digits, $n_times) {
$mask = 0x7FFFFFFF;
$digits = intval($digits);
if($n_times > 0) {
$digits = ($digits<<$n_times%32) & (($digits>>(32-$n_times%32)) & ($mask>>(31-$n_times%32)));
}elseif($n_times < 0) {
$n_times = abs($n_times);
$digits = (($digits>>$n_times%32) & ($mask >> (-1+$n_times%32))) | ($digits<<(32-$n_times%32));
}
return decbin($digits);
}
Конечно, после того, как я зашифровал свой пароль, я смог расшифровать его.
Есть ли способ сделать это?
Вам не нужно писать мне код, чтобы сделать это, было бы здорово, если бы вы могли объяснить мне это и словами.
«Конечно, после того, как я зашифровал свой пароль, я смог расшифровать его». — в корне неправильно! Правая функция шифрования (то есть хэш-функция) не должна иметь обратной функции. Очень простой алгоритм идентификации:
1. Пользователь вводит пароль
2. Получить хеш от пароля с помощью функции шифрования (enter_hash = f (пароль))
3. Сравните введенный хеш с right_hash_stored
НИКОГДА хранить пароли, только хэши!
Я думаю, что если вы хотите, чтобы ваша функция шифрования имела реверс, она должна состоять из функции, имеющей реверс, поэтому AND и OR не такие, а ROT и XOR.
Так что все, что вам нужно — это squense ROT / XOR (для маски XOR вы можете использовать зашифрованное значение шага previos squense, в этом случае оно также должно быть сохранено)
Других решений пока нет …