qq_34835742
Chinese darker
采纳率50%
2019-10-15 09:11

能不能详细讲解一下这个PHP加密算法每行代码的意思?

图片说明

<?php
function encrypt($data, $key) {
    $key = md5($key);
    $x = 0;
    $len = strlen($data);
    $l = strlen($key);
    $char = '';
    $str = '';
    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) {
            $x = 0;
        }
        $char.= $key{$x};
        $x++;
    }
    for ($i = 0; $i < $len; $i++) {
        $str.= chr(ord($data{$i}) + (ord($char{$i})) % 256);
    }
    return base64_encode($str);
}
//  解密算法
function decrypt($data, $key) {
    $key = md5($key);
    $x = 0;
    $data = base64_decode($data);
    $len = strlen($data);
    $l = strlen($key);
    $char = '';
    $str = '';
    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) {
            $x = 0;
        }
        $char.= substr($key, $x, 1);
        $x++;
    }
    for ($i = 0; $i < $len; $i++) {
        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
            $str.= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        } else {
            $str.= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }
    return $str;
}
//  加密解密均需要用同一个加密密钥
$data = 'PHP含秘钥的加密解密算法'; // 被加密信息
$key = 'www.mafutian.net'; // 密钥
$encrypt = encrypt($data, $key);
$decrypt = decrypt($encrypt, $key);
echo '明文:' . $data;
echo '<br />';
echo '密文:' . $encrypt;
echo '<br />';
echo '明文:' . $decrypt;
?>


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 2年前
    加密算法,首先将key做一个md5的计算
    让(原文每个字符+密钥对应每个字符)%256得到密文
    密钥可能比原文长,用完以后,密文再从头开始
    最后,用base64对密文编码,输出
    
    解密
    也是先算出key的md5
    然后反过来,先base64解码得到密文
    密文每个字-密钥,如果<0再加256,得到原文
    最后返回原文
    
    点赞 1 评论 复制链接分享