使用凯撒算法进行数据通信加密

凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d;b会被替换成e;依此类推。字母表末尾将回卷到字母表开头。于是,w会被替换为z,x会被替换为a。

需求

1ZNNVKOC5UF9KPYKH~$LZ$Y

 

对于使用rsa算法加密解密数据,可参考《使用rsa算法进行数据通信加密》

客户端算法:




 

服务端算法:


%-";
    $new_str = "";
    $i = 0;
    $j = 0;
    for($i = 0; $i < strlen($str); $i++){
        $c = substr($str, $i, 1);
        if($j = strpos($en_str, $c)) {
            $j = $j + $step;
            $j = $j > strlen($en_str)-1 ? $j - strlen($en_str) : $j;
            $c = substr($en_str, $j, 1);
        }
        $new_str = $new_str.$c;
    }
    return $new_str;
}
/**
 * 解密
 * @param string $str 解密字符串
 * @param int $step 位移量
 */
function caesar_decrypt($str, $step)
{
    $de_str = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/<>%-";
    $new_str = "";
    $i = 0;
    $j = 0;
    for($i = 0; $i < strlen($str); $i++){
        $c = substr($str, $i, 1);
        if($j = strpos($de_str, $c)) {
            $j = $j - $step;
            $j = $j < 0 ? $j + strlen($de_str) : $j;
            $c = substr($de_str, $j, 1);
        }
        $new_str = $new_str.$c;
    }
    return $new_str;
}

$str = "hello world;";
$str = caesar_encrypt($str, 10);
echo "encrypt: ".$str."
"; $str = caesar_decrypt($str, 10); echo "decrypt: ".$str."
"; ?>

 
以上的加密算法只能加密解密中文字符,若需要对中文加密,则需要先将中文转换字母或数字,比如可使用urlencode()方法转换,在php中直接用urlencode()方法即可,但要注意此中文一定要是UTF-8格式的,在JS中有点复杂,具体实现如下:
此JS代码参考地址
 




 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>