2015-10-22 15 views
5

Zostałem poproszony o zaszyfrowanie hasła poprzez utworzenie nowej procedury i to, co myślałem, to pracować z bitami, aby zmienić każdy znak mojego klucza wejściowego z pozornie niezwiązanymi ze sobą znakami, więc napisałem tę funkcję:Czy istnieje sposób odwrócenia tej operacji bitowej?

(I "pracuję z kodem 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); 
} 

Oczywiście po zaszyfrowaniu hasła powinienem móc je odszyfrować.

Czy jest jakiś sposób to zrobić?

Nie musisz pisać kodu, żeby to zrobić, byłoby wspaniale, gdybyś mógł mi to wyjaśnić słowami.

+0

Ja też się wylizywałabym, ale mój nauczyciel poprosił mnie o prawo szyfrowanie, więc domyślam się, że będę musiał to zrobić ... –

+0

To prawdopodobnie część specyfikacji do twojego certyfikatu, więc nie mogę winić cię za to, chociaż komisja egzaminacyjna za jakąkolwiek certyfikację, którą naprawdę robisz, nie powinna Naucz tego w zakresie haseł. – cybermonkey

+0

Cóż, ten z nas, który stworzy najbezpieczniejszy algorytm, uzyska najlepszą ocenę, więc staram się robić co w mojej mocy! –

Odpowiedz

1

"Oczywiście po zaszyfrowaniu hasła powinienem móc je odszyfrować." - zasadniczo źle! Funkcja prawego szyfrowania (tj. Funkcja skrótu) nie powinna mieć funkcji wstecznej. Bardzo prosty algorytm identyfikacji:
1. Użytkownik wpisuje hasło
2. Pierwsze hash z hasłem przy użyciu funkcji szyfrowania (entered_hash = f (hasło))
3. Porównaj entered_hash z right_hash_stored
NIGDY przechowywania haseł, tylko mieszań !

Myślę, że jeśli chcesz, aby funkcja szyfrowania ma odwrotność, powinna ona składać się z funkcji posiadającej odwrotność, więc AND i OR nie są takie, ale ROT i XOR są. A więc wszystko, czego potrzebujesz - skwery ROT/XOR (dla maski XOR możesz użyć zaszyfrowanej wartości wcześniejszego kroku, w tym przypadku musi być również zapisany)

+0

Tak, doskonale wiem, że nie powinien być szyfrowany i jak zweryfikować, czy wprowadzono hasło pasuje do t wymyślił jeden, ale z jakiegoś powodu to ćwiczenie wymaga odwrócenia go po zaszyfrowaniu. Oczywiście to nie jest praca zawodowa. –

+0

W przypadku ROT masz na myśli cykliczną zmianę? –

+0

Tak: na przykład istnieje lista [2,3] - każda wartość oznacza liczbę do przesunięcia kołowego (niech będzie to przesunięcie w lewo) z następującymi wartościami XOR, tj. Przesunięcie XOR z przesunięciem liczbowym do przesunięcia. Szyfrowanie kroków: –

Powiązane problemy