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!
以上是我对可逆加密算法的初步认识与理解,后面会继续更新更多的可逆加密算法。
欢迎补充!
千而の大狮子!