随笔 - 317, 文章 - 0, 评论 - 453, 阅读 - 114万
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

PHP 简易的BASE64加密

Posted on   PHP-张工  阅读(273)  评论(2编辑  收藏  举报

有这样一个有趣的公式:x<100;  (x*53*17)%100 = x;
这个公式的原理:53*17=901,x*901,的数后2位数还是x;任何符合 a * b = 100 * n +1 的值都可以。
根据这个原理就可以做一个简单的加密操作。
比如要加密的数是 26,使用(26*53)%100=78,加密后的值是78,在用(78*17)%100=26;
这样53就是加密的密钥,而17就时解密的密钥。
利用这个原理,通过base64加密字符串后,得到了 A~Z a~z 0~9 +/= 共65个字符。
利用 x < 65,则 (x*31*21)%65=x 就可以实现base64的简单加密了。
31就时加密密钥,21就时解密密钥,当然只要符合这个公式( a * b = 65 * n + 1)的 a,b 值都可替换。

PHP 实现的代码如下:

复制代码
<?php

// 利用 x < 65,则 x*31*21 再取余65 得到的就时原值
// 100取余时,可以使用 (x*53*17)%100 = x

// 加密
function zencode($s)
{
    $s = base64_encode($s);
    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    $s1 = '';
    for ($i=0; $i<strlen($s); $i++){
        $v = strpos($chars, $s[$i]);
        $v *= 31;
        $v = $v % 65;
        $s1 .= $chars[$v];
    }
    
    return $s1;
}

// 解密
function zdecode($s)
{
    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    $s1 = '';
    for ($i=0; $i<strlen($s); $i++){
        $v = strpos($chars, $s[$i]);
        $v *= 21;
        $v = $v % 65;
        $s1 .= $chars[$v];
    }
    
    $s2 = base64_decode($s1);
    
    return $s2;
}

$str = 'abc中国人民HELLO123!';
$s = zencode($str);
$s1 = zdecode($s);

echo '原文:' . $str . PHP_EOL;
echo '加密:' . $s . PHP_EOL;
echo '解密:' . $s1;
复制代码

 

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2018-12-20 dat.gui stats.js 通用参数配置及图像统计工具
2013-12-20 简易瀑布流
点击右上角即可分享
微信分享提示