有没有办法扭转这种按位功能?

Baf*_*sta 5 php encryption bit-manipulation reversing function

我被要求通过创建一个新程序来加密密码,我想的是使用位来改变输入键的每个字符与显然不相关的字符,所以我写了这个函数:

(我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

当然,在我加密密码后,我应该可以解密它.

有没有办法做到这一点?

你不需要把代码写给我,如果你能用文字向我解释它会很棒.

Val*_*l K 1

“当然,在我加密密码之后,我应该能够解密它。” - 从根本上来说是错误的!正确的加密函数(即散列函数)不应具有反向函数。非常简单的识别算法:
1. 用户输入密码
2. 使用加密函数从密码中获取哈希值(entered_hash=f(password))
3. 将 Entered_hash 与 right_hash_stored 进行比较
从不存储密码,仅存储哈希值!

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