开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 664|回复: 2
收起左侧

[PHP源码] PHP版RC4和文本加密

[复制链接]
结帖率:100% (16/16)
发表于 2023-3-12 07:18:16 | 显示全部楼层 |阅读模式   河南省郑州市
本帖最后由 花开ヽ若相依 于 2023-3-12 07:19 编辑

这两天闲得无聊看到问答有人问。。。顺手写一下

第一个对应的是精易模块的文本_加密 和 文本_解密    第二个对应的是 CryptoJS 里面的 RC4加密和解密

精易模块的解密只是判断了一下密码。。。实际上解密根本用不到密码

另外CryptoJS的RC4和原生的RC4是有区别的  使用了 CryptoJS里面的evpKDF 来生成一个随机的Key和对应的Salt来进行RC4加密  之后把Salt拼接上去  

[PHP] 纯文本查看 复制代码
<?php 
 
function bytesToStr($bytes)
{
    $str = '';
    foreach ($bytes as $ch) {
        $str .= chr($ch);
    }
    return $str;
}
 
function strToBytes($string)
{
    $bytes = array();
    for ($i = 0; $i < strlen($string); $i++) {
        $bytes[] = ord($string[$i]);
    }
    return $bytes;
}
 
function estrencode($text,$key){
     
    $temptext = iconv("UTF-8","GB2312",$text);
 
    $BytesArray = strToBytes($temptext);
 
    $TempBytesStr = '';
 
    foreach ($BytesArray as $ch) {
     
        $TempBytesStr.= sprintf("%02X",strToBytes(chr(($ch^3600)))[0]);
         
    }
 
 
    $TempKey = strtoupper(substr(md5($key),2,9));
 
    return $TempBytesStr.$TempKey;
    
}
 
 
function estrdecode($text,$key){
     
    $UserKey = substr($text,-9);
     
    $TempKey = strtoupper(substr(md5($key),2,9));
     
    if($UserKey!=$TempKey){
         
        exit("密码错误");
         
    }
     
    $Temptext = substr($text,0,strlen($text)-9);
     
    $TempBytes = array();
     
    for ($i=0;$i<strlen($Temptext)/2;$i++)
        $TempBytes[]= strToBytes(chr((hexdec($Temptext[$i*2].$Temptext[$i*2+1])^3600)))[0];
     
    return iconv("GB2312","UTF-8",bytesToStr($TempBytes));
    
}
 
 
 
$text = "精易论坛花开若相依";
 
$key = "bbs125la";
 
$EnStr = "AEBBC2C7D2CBDCA3ABB8AFBAD8E4DFF0C2D081BA0240D";
 
echo estrencode($text,$key);
 
echo "</br>";
 
echo estrdecode($EnStr,$key);
 
 
 
 
 
?>



[PHP] 纯文本查看 复制代码
<?php

function EVP_BytesToKey($salt, $password) {
    $bytes = '';
    $last = '';
    while(strlen($bytes) < 48) {
        $last = hash('md5', $last . $password . $salt, true);
        $bytes.= $last;
    }
    return $bytes;
} 

function evpKDF($password, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") {
    $salt=mt_rand(11111111,99999999);
    $targetKeySize = $keySize + $ivSize;
    $derivedBytes = "";
    $numberOfDerivedWords = 0;
    $block = NULL;
    $hasher = hash_init($hashAlgorithm);
    while ($numberOfDerivedWords < $targetKeySize) {
        if ($block != NULL) {
            hash_update($hasher, $block);
        }
        hash_update($hasher, $password);
        hash_update($hasher, $salt);
        $block = hash_final($hasher, TRUE);
        $hasher = hash_init($hashAlgorithm);

        for ($i = 1; $i < $iterations; $i++) {
            hash_update($hasher, $block);
            $block = hash_final($hasher, TRUE);
            $hasher = hash_init($hashAlgorithm);
        }

        $derivedBytes .= substr($block, 0, min(strlen($block), ($targetKeySize - $numberOfDerivedWords) * 4));

        $numberOfDerivedWords += strlen($block)/4;
    }

    return array(
        "key" => substr($derivedBytes, 0, $keySize * 4),
        "salt"=>$salt
    );
}

function Js_Rc4_Decode($text, $password) {

    $TextBin = base64_decode($text);

    $KdfSalt = substr($TextBin, 8, 8);

    $TextStr = substr($TextBin, 16);

    $KdfIv = EVP_BytesToKey($KdfSalt, $password);

    $Rc4Key = substr($KdfIv, 0, 32);

    $Rc4DeStr = openssl_decrypt($TextStr, "RC4", $Rc4Key, OPENSSL_RAW_DATA, '');

    return $Rc4DeStr;
    
    
}


function Js_Rc4_Encode($text, $password) {
    
    $EncodeInfoArray = evpKDF($password);
    
    $EncodeKey = $EncodeInfoArray['key'];
    
    $EncodeSalt = $EncodeInfoArray['salt'];
    
    $Rc4EnStr = base64_encode('Salted__'.$EncodeSalt.openssl_encrypt($text, "RC4", $EncodeKey, OPENSSL_RAW_DATA, ''));

    return $Rc4EnStr;
    
}


$Temp_Str = "精易论坛花开若相依";

$Key = "bbs125la";

$EnStr = "U2FsdGVkX19j7ZGiks/qOK6x0ZK+icVIraTPQG8EPV60uWWIpLVrRfEigw==";

$Str = Js_Rc4_Decode($EnStr,$Key);

echo $Str.'</br>';

$EnStr = Js_Rc4_Encode($Temp_Str,$Key);

echo $EnStr.'</br>';

$Str = Js_Rc4_Decode($EnStr,$Key);

echo $Str.'</br>';

?>




结帖率:88% (29/33)

签到天数: 10 天

发表于 2023-3-12 08:22:29 | 显示全部楼层   广东省佛山市
这个我也发现了 直接改一下模块 有密文就能直接解密根本不需要密码
回复 支持 反对

使用道具 举报

结帖率:100% (16/16)

签到天数: 5 天

 楼主| 发表于 2023-3-12 07:20:42 | 显示全部楼层   河南省郑州市
第一个里面第68行是文本格式的   莫名其妙被加上了个超链接,用的时候删一下就好了
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表