2015-10-22 132 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.用戶通過使用加密函數(entered_hash = F(密碼))進入密碼
2.從密碼獲取散列
3.比較entered_hash與right_hash_stored
NEVER存儲密碼,唯一哈希值!

我想,如果你想要你的加密函數有反向,它應該由具有反向的函數組成,所以AND和OR不是這樣,而是ROT和XOR。 所以你需要的 - ROT/XOR的序列(對於XOR掩碼,你可以使用previos squense步驟的加密值,在這種情況下,它必須保存)

+0

是的,我完全知道它不應該被加密,以及如何驗證是否輸入密碼與t相匹配他捨去了一個,但由於某種原因,這項練習一旦加密就需要將其撤銷。 當然這不是一個專業的工作。 –

+0

隨着ROT你的意思是循環移位? –

+0

是:例如有一個列表[2,3] - 每個值表示循環移位的數字(讓它左移)與下一個XOR,即數字到移位的XOR移位結果。加密步驟: –

相關問題