这种加密解密如何工作?

时间:2011-05-22 14:26:59

标签: php encryption cakephp-1.2

我在调试了为什么not working on my server之后,在CakePHP的核心类中找到了这个加密解密代码。

我只是想知道它背后的逻辑。它是如何设法加密和解密的?为什么带有$ j的for..loop,以及XOR运算符^如何帮助?

function cipher($text, $key) {
    if (!defined('CIPHER_SEED')) {
        //This is temporary will change later
        define('CIPHER_SEED', '76859309657453542496749683645');
    }
    srand(CIPHER_SEED);
    $out = '';

    for ($i = 0; $i < strlen($text); $i++) {
        for ($j = 0; $j < ord(substr($key, $i % strlen($key), 1)); $j++) {
            $toss = rand(0, 255);
        }
        $mask = rand(0, 255);
        $out .= chr(ord(substr($text, $i, 1)) ^ $mask);
    }
    return $out;
}

1 个答案:

答案 0 :(得分:2)

^按位XOR运算符。因此,它依次通过按位对每个字符进行加密,并将其与“随机”字符进行异或。该操作是它自己的反转,即(a ^ b) ^ b == a。因此,只要您在解密期间生成与加密过程中相同的“随机”掩码字符序列,您就可以随时取回您开始使用的内容。

$j循环似乎正在使用$key来丢弃rand()生成的值的某一部分流。这看起来像是从同一个RNG中获取许多不同随机流的廉价方式。不过,我不确定这是否是一种非常安全的方法。与AES等既定方法相比,家庭酿造的加密尝试通常具有极其严重的缺陷。