AAEncode 实现加密和解密算法

因为要参加CTF比赛, 遇到AAEncode 加密和解密的题目,目前来说有三种解决方法。

  1. 直接通过在线解密,网站很多,百度即可,但是比赛要求离线,这个基本废了。
  2. 通过浏览器开发者工具将加密代码进行解密,可以,但是只能解密不能加密。
  3. 自己搭建Apache + PHP + ZendEngel 然后写PHP脚本来实现,我这里就是这种方法。

首先 AAEnDeCode.php 主要进行解密加密算法。

<?php

$b = [
    "(c^_^o)",
    "(゚Θ゚)",
    "((o^_^o) - (゚Θ゚))",
    "(o^_^o)",
    "(゚ー゚)",
    "((゚ー゚) + (゚Θ゚))",
    "((o^_^o) +(o^_^o))",
    "((゚ー゚) + (o^_^o))",
    "((゚ー゚) + (゚ー゚))",
    "((゚ー゚) + (゚ー゚) + (゚Θ゚))",
    "(゚Д゚) .゚ω゚ノ",
    "(゚Д゚) .゚Θ゚ノ",
    "(゚Д゚) ['c']",
    "(゚Д゚) .゚ー゚ノ",
    "(゚Д゚) .゚Д゚ノ",
    "(゚Д゚) [゚Θ゚]"
];

function charCodeAt($str, $index)
{
    $char = mb_substr($str, $index, 1, 'UTF-8');
    if (mb_check_encoding($char, 'UTF-8'))
    {
        $ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');
        return hexdec(bin2hex($ret));
    }
    else
    {
        return null;
    }
}
 
function uchr ($codes) {
    if (is_scalar($codes)) $codes= func_get_args();
    $str= '';
    foreach ($codes as $code){
    	$buf = html_entity_decode('&#'.$code.';',ENT_NOQUOTES,'UTF-8');
		$buf == '&#'.$code.';' && ($buf = mb_convert_encoding('&#' . intval($code) . ';', 'UTF-8', 'HTML-ENTITIES'));
    	$str.= $buf;
    }
    return $str;
}
 
 
function aaencode($text)
{
	global $b;
	
	$r = "゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); ";
	if(preg_match('/ひだまりスケッチ×(365|356)\s*来週も見てくださいね[!!]/', $text)){
		$r .= "X=_=3; ";
		$r .= "\r\n\r\n    X / _ / X < \"来週も見てくださいね!\";\r\n\r\n";
	}
	
	$r .= "(゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);".
        "(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ".
        ",゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ".
        ",゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];".
        "(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];".
        "(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];".
        "(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ".
        "((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+".
        "((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+".
        "((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+".
        "((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];".
        "(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+".
        "((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+".
        "((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; ".
        "(゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\\\'; ".
        "(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];".
		"(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];".
        "(゚Д゚) [゚o゚]='\\\"';".
        "(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+";
	$r .= "(゚Д゚)[゚o゚]+ ";
 
	for( $i = 0; $i < mb_strlen($text); $i++ ){
        $n = charCodeAt($text,$i);
        $t = "(゚Д゚)[゚ε゚]+";
		if( $n <= 127 ){
			$t .= preg_replace_callback('/[0-7]/', function($c)use ($b){
				return $b[$c[0]]."+ ";
			}, ((string)decoct($n)));
		}else{
			if(preg_match('/[0-9a-f]{4}$/', '000'.((string)dechex($n)),$result)){
				$m = $result[0];
			}else{
				$m = '';
			}
			$t .= "(o゚ー゚o)+ " . preg_replace_callback('/[0-9a-f]/i',function($c)use ($b){
				return $b[ hexdec($c[0]) ] . "+ ";
			},$m);
		}
        $r .= $t;
    }
	$r .= "(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');";
	return $r;
}
 
 
function aadecode($text){
	global $b;
	$text = strtr($text, ["(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');" => '']);
 
	for($i=0;$i<count($b);$i++){
		$buf = $b[$i];
		
		if($i <=7){
			//8进制逆向
			$str = (($i));
			$text = strtr($text, [$buf."+ "=>$str]);
		}else{
			//16进制逆向
			$text = strtr($text, [$buf."+ " => dechex($i)]);
		}
		
	}
	
	$text = preg_replace_callback('/\(゚Д゚\)\[゚ε゚\]\+(\d+)/', function($c){
		return uchr(octdec($c[1]));
	}, $text);
	$text = preg_replace_callback('/\(゚Д゚\)\[゚ε゚\]\+\(o゚ー゚o\)\+\s+([0-9a-f]{4})/', function($c){
		return uchr(hexdec($c[1]));
	}, $text);
	
	$pre = [
		"゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); ",
		"X=_=3; ",
		"\r\n\r\n    X / _ / X < \"来週も見てくださいね!\";\r\n\r\n",
		"(゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);",
        "(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ",
        ",゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ",
        ",゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];",
        "(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];",
        "(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];",
        "(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ",
        "((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+",
        "((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+",
        "((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+",
        "((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];",
        "(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+",
        "((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+",
        "((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; ",
        "(゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\\\'; ",
        "(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];",
		"(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];",
        "(゚Д゚) [゚o゚]='\\\"';",
        "(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+",
        "(゚Д゚)[゚o゚]+ ",
	];
	$rA = [];
	foreach($pre as $val){
		$rA[$val] = '';
	}
	$text = strtr($text,$rA);
	return $text;
}

?>

然后调用方法:

include_once 'AAEnDeCode.php';
   
if($_POST['type']=="Encode")
{
    echo  aaencode($_POST['inputstr']);
}

if($_POST['type']=='Decode')
{
    echo  aadecode($_POST['inputstr']);
}

前台通过一个 标签,通过ajax 提交

 function SubmitForm(type)
 {
     $.ajax({
         type: "POST",
         url: "Submit.php",
         data: {type:type, inputstr:$("#Source").val()},
         dataType: "text",
         success: function(data)
         {
            $("#Source").val(data);
         }
     });
 }

html 代码: 注意引入 jquery-1.8.0.min.js 库

<form id="EncodeForm"  >
<div style="margin:0;">
<h3>AAEncode加密解密  离线使用-支持中文汉字</h3>
<textarea id="Source"  style="width:100%;height:550px"></textarea>
<div class="buttondiv">
<input type="button" value="加密"  onclick='SubmitForm("Encode")' /><input type="button"  value="解密"  onclick='SubmitForm("Decode")' />
</div>
</div>
</form>

实现:本地环境 http://localhost

在这里插入图片描述
点击加密:
在这里插入图片描述

然后点击解密,恢复明文

在这里插入图片描述
O 了 , 然后就可以 http://localhost 跑脚本了。不怕没有网络。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于使用C语言实现AES加密算法和RSA加密算法,你可以按照以下步骤进行操作: 1. AES加密算法实现: - 首先,你需要导入相关的库文件,如openssl/aes.h。 - 接下来,你可以选择使用AES-128、AES-192或AES-256等不同的密钥长度。选择一个适合的密钥长度后,你可以生成一个随机的密钥,并设置初始向量(IV)。 - 然后,你可以使用AES加密函数,如AES_set_encrypt_key()和AES_encrypt(),将明文加密为密文。 - 最后,记得释放相关的资源,并清理内存。 2. RSA加密算法实现: - 首先,你需要导入相关的库文件,如openssl/rsa.h。 - 接下来,你可以使用RSA_generate_key函数生成RSA的公钥和私钥。 - 然后,你可以使用RSA公钥对明文进行加密,使用RSA私钥对密文进行解密。 - 除此之外,你还可以使用RSA私钥对明文进行签名,使用RSA公钥对签名进行验证。 下面是一个示例代码,演示了如何使用C语言实现AES和RSA加密算法: ```c #include <stdio.h> #include <openssl/aes.h> #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/err.h> // AES加密函数 void aes_encrypt(const unsigned char *plain_text, unsigned char *cipher_text, const unsigned char *key, const unsigned char *iv) { AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); AES_cbc_encrypt(plain_text, cipher_text, 128, &aes_key, iv, AES_ENCRYPT); } // RSA加密函数 int rsa_encrypt(const unsigned char *plain_text, int plain_text_len, unsigned char *cipher_text, RSA *rsa) { int rsa_len = RSA_size(rsa); int result = RSA_public_encrypt(plain_text_len, plain_text, cipher_text, rsa, RSA_PKCS1_PADDING); return result; } int main() { // AES加密示例 unsigned char aes_key[16]; // 128位密钥 unsigned char iv[16]; // 初始向量 unsigned char plain_text[] = "Hello, AES!"; unsigned char cipher_text[128]; // 生成随机的密钥和初始向量 // ... // 使用AES加密算法加密明文 aes_encrypt(plain_text, cipher_text, aes_key, iv); printf("AES Encrypted Text: %s\n", cipher_text); // RSA加密示例 RSA *rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL); unsigned char rsa_plain_text[] = "Hello, RSA!"; unsigned char rsa_cipher_text[256]; // 使用RSA公钥加密明文 rsa_encrypt(rsa_plain_text, sizeof(rsa_plain_text), rsa_cipher_text, rsa); printf("RSA Encrypted Text: %s\n", rsa_cipher_text); RSA_free(rsa); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值