可逆加密算法(一):ASCII 码加密,恺撒加密,Base64加密

10 篇文章 0 订阅
1 篇文章 0 订阅

ASCII 码加密,恺撒加密,Base64

这三种加密方式都是可逆的。

1 ASCII 码加密和解密

ASCII 码加密就是把字符串的变换成ASCII 码的数字传送。(只能输入英文等字符,不可以输入中文文字!)

加密:

function ASCII_encrypt($str)
{
    $arr = str_split($str);
    $str_code = '';
    foreach ($arr as $k => $v) {
        if (ord($v) == 32) {
            $str_code .= ord($v);
        } else {
            $str_code .= ord($v) - 23;
        }
    }
    return $str_code;
}

解密:

function ASCII_decrypt($str)
{
    $arr = str_split($str, 2);
    $str_code = '';
    foreach ($arr as $kk => $vv) {
        if ($vv == 32) {
            $str_code .= chr($vv);
        } else {
            $str_code .= chr($vv + 23);
        }
    }
    return $str_code;
}

运行后得到的结果:

$str = 'Fly in the sky!';
$ASCII_encrypt = ASCII_encrypt($str);
echo $ASCII_encrypt;
echo '<br>';
$ASCII_decrypt = ASCII_decrypt($ASCII_encrypt);
echo $ASCII_decrypt;

478598328287329381783292849810
Fly in the sky!

2 恺撒加密和解密

恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。

/**
 * @param $str -要加密的字符串
 * @param $code -偏移位数
 * @param int $type -0(默认)加密,1解密
 * @return string
 */
function caesar($str, $code, $type = 0)
{
    if ($type == 1) {
        $code = -$code;
    }
    $arr = str_split($str);
    $str_caesar = '';
    foreach ($arr as $k => $v) {
        if (preg_match("/^[a-z]/i", $v)) {
            $str_code = ord($v) + $code;
            if (strtoupper($v) === $v) {
                if ($str_code > ord('Z')) {
                    $str_code -= 26;
                }
                if ($str_code < ord('A')) {
                    $str_code += 26;
                }
            }
            if (strtolower($v) === $v) {
                if ($str_code > ord('z')) {
                    $str_code -= 26;
                }
                if ($str_code < ord('a')) {
                    $str_code += 26;
                }
            }
            $str_caesar .= chr($str_code);
        } else {
            $str_caesar .= $v;
        }
    }
    return $str_caesar;
}

运行后得到的结果:

$str = 'Fly in the sky!';
$caesar_encrypt = caesar($str,4);
echo $caesar_encrypt;
echo '<br>';
$caesar_decrypt = caesar($caesar_encrypt,4,1);
echo $caesar_decrypt;

Jpc mr xli woc!
Fly in the sky!

 3 Base64加密和解密

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。此时,采用Base64编码具有不可读性,需要解码后才能阅读。

PHP自带有base64加密和解密的函数:如下

$str = 'Fly in the sky!';

$bas = base64_encode($str);
echo $bas;
echo '<br>';
echo base64_decode($bas);

运行结果:

Rmx5IGluIHRoZSBza3kh
Fly in the sky!

 以上是我对可逆加密算法的初步认识与理解,后面会继续更新更多的可逆加密算法。

欢迎补充!
千而の大狮子!

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值