5

我被要求通过创建一个新程序来加密密码,而我的想法是使用位来将输入密钥的每个字符更改为明显不相关的字符,因此我编写了这个函数:

(我正在使用 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);
}

当然,在我加密我的密码后,我应该能够解密它。

有没有办法做到这一点?

你不需要给我写代码来做,如果你能用文字给我解释一下就好了。

4

1 回答 1

1

“当然,在我加密密码后,我应该能够解密它。” - 根本错误!右加密函数(即散列函数)不应该有反向函数。非常简单的识别算法:
1. 用户输入密码
2. 使用加密函数从密码中获取哈希值 (entered_hash=f(password))
3. 比较 entered_hash 和 right_hash_stored
永远不要存储密码,只存储哈希值!

我认为,如果您希望您的加密函数具有反向功能,它应该由具有反向功能的函数组成,因此 AND 和 OR 不是这样,但 ROT 和 XOR 是。所以你所需要的——ROT/XOR的squense(对于XOR掩码,你可以使用previos squense步骤的加密值,在这种情况下它必须被保存)

于 2015-10-22T19:05:33.573 回答