2015-10-22 5 views
5

Меня попросили зашифровать пароль, создав новую процедуру, и я подумал, что нужно работать с битами, чтобы изменить каждый символ моего ключа ввода с явно несвязанными символами, и поэтому я написал эту функцию:Есть ли способ отменить эту побитую функцию?

(I работаю с 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); 
} 

конечно после того, как я зашифрован мой пароль я должен быть в состоянии расшифровать его.

Есть ли способ сделать это?

Вам не нужно писать мне код, чтобы сделать это, было бы здорово, если бы вы могли объяснить это мне также со словами.

+0

Я бы тоже хэшировал, но мой учитель спросил меня прямо зашифруйте, так что, я думаю, мне придется это сделать ... –

+0

Возможно, это часть спецификации для вашей сертификации, поэтому я вряд ли могу вас обвинить в этом, хотя экзаменационная комиссия за любую сертификацию, которую вы делаете, действительно не должна преподавать это в рамках паролей. – cybermonkey

+0

Ну, один из нас, кто создаст самый безопасный алгоритм, получит лучшую оценку, поэтому я стараюсь изо всех сил! –

ответ

1

«Конечно, после того, как я зашифровал свой пароль, я смог его расшифровать». - принципиально неправильно !. Функция правого шифрования (т. Е. Хэш-функция) не должна иметь обратную функцию. Очень простой алгоритм идентификации:
1. Пользователь вводит пароль
2. Получить хэш от пароля, используя функцию кодирования (entered_hash = F (пароль))
3. Сравните entered_hash с right_hash_stored
NEVER хранят пароли, только хэши !

Я думаю, что если вы хотите, чтобы ваша функция шифрования имела обратную передачу, она должна состоять из функции с обратным, поэтому И и ИЛИ не являются такими, но ROT и XOR. Итак, все, что вам нужно - это склеивание ROT/XOR (для маски XOR вы можете использовать зашифрованное значение предыдущего скрипучего шага, в этом случае оно должно быть также сохранено)

+0

Да, я прекрасно знаю, что он не должен быть зашифрован и как проверить, совпадение паролей с t он хэшировал один, но почему-то это упражнение требует отменить его после зашифрования. Конечно, это не профессиональная работа. –

+0

С ROT вы имеете в виду круговой сдвиг? –

+0

Да: например, есть список [2,3] - каждое значение означает число с циклическим сдвигом (пусть это будет сдвиг слева) со следующим XOR, то есть сдвигом XOR сдвига числа в сдвиг. Шаги шифрования: –

 Смежные вопросы

  • Нет связанных вопросов^_^