首页 > 编程语言 >基础入门-算法逆向&散列对称非对称&JS源码逆向&AES&DES&RSA&SHA

基础入门-算法逆向&散列对称非对称&JS源码逆向&AES&DES&RSA&SHA

时间:2023-08-23 21:22:35浏览次数:41  
标签:逆向 AES 加密 RSA echo 源码 key 密文 password

基础入门-算法逆向&散列对称非对称&JS源码逆向&AES&DES&RSA&SHA

目录

安全测试中思路

密文-有源码直接看源码分析算法(后端必须要有源码才能彻底知道)

密文-没有源码1、猜识别 2、看前端JS(成功与否取决于:加密逻辑是不是在前端)

单向散列加密 -MD5

和其他加密的区别就是没有其他的东西,就是一个明文一个密文;所以只需要得到密文就可以尝试解密了

1692796469868

加盐的md5,那个点的意思是连接符,就是把里面的md5加密一次之后,后面连接上salt再进行一次md5

单向散列加密算法的优点有(以MD5为例):

方便存储,损耗低:加密/加密对于性能的损耗微乎其微。

单向散列加密的缺点

就是存在暴力破解的可能性,最好通过加盐值的方式提高安全性,此外可能存在散列冲突。我们都知道MD5加密也是可以破解的。

常见的单向散列加密算法有:

MD5 SHA MAC CRC

MD5密文特点:

1、由数字“0-9”和字母“a-f”所组成的字符串

2、固定的位数 16 和 32位

算法不可逆向的

解密需求:

密文即可,但复杂明文可能解不出

对称加密 -AES

1692796413478

key,iv偏移量,cipher mode模式,padding mode填充模式。ECB模式不需要偏移量

对称加密优点

是算法公开、计算量小、加密速度快、加密效率高。

缺点

是发送方和接收方必须商定好密钥,然后使双方都能保存好密钥,密钥管理成为双方的负担。

常见的对称加密算法

有:DES AES RC4

AES、DES密文特点:

同BASE64基本类似,但一般会出现"/"和"+"在密文中

明文越长,密文也越长

解密需求:

密文,模式,加密Key,偏移量,条件满足才可解出

最关键的是加密key,因为另外的两个都是可选项,可以利用工具一点点尝试

和md5不一样,是逆向算出来的,不是碰撞

非对称加密 -RSA

1692796436277

1692796448747

非对称加密的优点

是与对称加密相比,安全性更好,加解密需要不同的密钥,公钥和私钥都可进行相互的加解密。

缺点

是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

常见的非对称加密算法:

RSA RSA2 PKCS

RSA密文特点:

特征同AES,DES相似,但是长度较长

主要的区别就是长度较长

而且对于同样的明文,会加密出不一样的密文

解密需求:

密文,公钥或私钥即可解出

如果密文是用公钥加密的,就要用私钥解密,如果密文使用私钥加密的,那就要用公钥解密

BASE64编码特点:

0、大小写区分,通常是数字和字母的组合

1、一般情况下密文尾部都会有两个等号,一般是数字结尾就会有,也会有一个等号,明文很少的时候则没有

2、明文越长密文越长,一般不会出现"/""+"在密文中

3、是可以逆向的

其他密文特点见:

1.30余种加密编码类型的密文特征分析(建议收藏)

https://mp.weixin.qq.com/s?__biz=MzAwNDcxMjI2MA==&mid=2247484455&idx=1&sn=e1b4324ddcf7d6123be30d9a5613e17b&chksm=9b26f60cac517f1a920cf3b73b3212a645aeef78882c47957b9f3c2135cb7ce051c73fe77bb2&mpshare=1&scene=23&srcid=1111auAYWmr1N0NAs9Wp2hGz&sharer_sharetime=1605145141579&sharer_shareid=5051b3eddbbe2cb698aedf9452370026#rd

2.CTF中常见密码题解密网站总结(建议收藏)

https://blog.csdn.net/qq_41638851/article/details/100526839

3.CTF密码学常见加密解密总结(建议收藏)

https://blog.csdn.net/qq_40837276/article/details/83080460

解密实例-密文存储&数据传输

1、密码存储(后端处理)

例子:X3.2-md5&salt

DZ对应代码段-/uc_server/model/user.php

function add_user() {
	$password = md5(md5($password).$salt);
}

<?PHP
$h = 'd7192407bb4bfc83d28f374b6812fbcd';
$hash=md5(md5('123456').'3946d5');
if($h==$hash){
	echo 'ok';
}else{
	echo 'no';
}
?>

例子:X3.5-hash

DZ对应代码段-/uc_server/model/user.php

function add_user() {
		$salt = '';
		$password = $this->generate_password($password);
}

function generate_password($password) {
		$algo = $this->get_passwordalgo();
		$options = $this->get_passwordoptions();
		$hash = password_hash($password, $algo, $options);
}

<?PHP
$hash = '$2y$10$KA.7VYVheqod8F3X65tWjO3ZXfozNA2fC4oIZoDSu/TbfgKmiw7xO';
if (password_verify('123456', $hash)) {  //是这个网站的解密的接口
	echo 'ok';
} else {
    echo 'error';
}
?>

2、数据通讯

例子:-博客登录-zblog(前端处理)

<script src="script/md5.js" type="text/javascript"></script>
$("#btnPost").click(function(){
	var strPassWord=$("#edtPassWord").val();
	$("form").attr("action","cmd.php?act=verify");
	$("#password").val(MD5(strPassWord));
}

各类加密的代码演示:

//PHP7.3加密演示代码块
<?php
//aes
namespace vendor;
class EncryptionTool{
    
	public static function enAES($originTxt, $key): string{
        	return base64_encode(openssl_encrypt($originTxt, 'AES-128-ECB',$key, 		OPENSSL_RAW_DATA));
	}

	public static function deAES($originTxt, $key): string{
		$data = base64_decode($originTxt);
		return openssl_decrypt($data,'AES-128-ECB',$key, OPENSSL_RAW_DATA);
	}
}

//des
class DES{
/**
\* @var string $method 加解密方法,可通过 openssl_get_cipher_methods() 获得
*/
	protected $method;
/**
\* @var string $key 加解密的密钥
*/
	protected $key;
/**
\* @var string $output 输出格式 无、base64、hex
*/
	protected $output;
/**
\* @var string $iv 加解密的向量
*/
	protected $iv;
/**
\* @var string $options
*/
	protected $options;
// output 的类型
	const OUTPUT_NULL = '';
	const OUTPUT_BASE64 = 'base64';
	const OUTPUT_HEX = 'hex';
/**
   \* DES constructor.
   \* @param string $key
   \* @param string $method
   \*   ECB DES-ECB、DES-EDE3 (为 ECB 模式时,$iv 为空即可)
   \*   CBC DES-CBC、DES-EDE3-CBC、DESX-CBC
   \*   CFB DES-CFB8、DES-EDE3-CFB8
   \*   CTR
   \*   OFB
   *
   \* @param string $output
   \*   base64、hex
   *
   \* @param string $iv
   \* @param int $options
*/
	public function __construct($key, $method = 'DES-ECB', $output = '', $iv = '', $options = OPENSSL_RAW_DATA | OPENSSL_NO_PADDING){
		$this->key = $key;
		$this->method = $method;
         $this->output = $output;
         $this->iv = $iv;
         $this->options = $options;
	}
/**
\* 加密
   *
   \* @param $str
   \* @return string
*/
	public function encrypt($str){
		$str = $this->pkcsPadding($str, 8);
		$sign = openssl_encrypt($str, $this->method, $this->key, $this->options, $this->iv);
		if ($this->output == self::OUTPUT_BASE64) {
			$sign = base64_encode($sign);
         } else if ($this->output == self::OUTPUT_HEX) {
             $sign = bin2hex($sign);
         }
         return $sign;
	}
/**
\* 解密
*
\* @param $encrypted
\* @return string
*/
    public function decrypt($encrypted){
        if ($this->output == self::OUTPUT_BASE64) {
            $encrypted = base64_decode($encrypted);
        } else if ($this->output == self::OUTPUT_HEX) {
            $encrypted = hex2bin($encrypted);
        }
        $sign = @openssl_decrypt($encrypted, $this->method, $this->key, $this->options, $this->iv);
        $sign = $this->unPkcsPadding($sign);
        $sign = rtrim($sign);
        return $sign;
    }
/**
\* 填充
*
\* @param $str
\* @param $blocksize
\* @return string
*/
	private function pkcsPadding($str, $blocksize){
		$pad = $blocksize - (strlen($str) % $blocksize);
         return $str . str_repeat(chr($pad), $pad);
    }
/**
\* 去填充
\* 
\* @param $str
\* @return string
*/
	private function unPkcsPadding($str){
		$pad = ord($str{strlen($str) - 1});
		if ($pad > strlen($str)) {
			return false;
		}
        return substr($str, 0, -1 * $pad);
    }
}



//rsa
define('RSA_PUBLIC', '-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmkANmC849IOntYQQdSgLvMMGm

8V/u838ATHaoZwvweoYyd+/7Wx+bx5bdktJb46YbqS1vz3VRdXsyJIWhpNcmtKhY

inwcl83aLtzJeKsznppqMyAIseaKIeAm6tT8uttNkr2zOymL/PbMpByTQeEFlyy1

poLBwrol0F4USc+owwIDAQAB

-----END PUBLIC KEY-----');



define('RSA_PRIVATE','-----BEGIN PRIVATE KEY-----

MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKaQA2YLzj0g6e1h

BB1KAu8wwabxX+7zfwBMdqhnC/B6hjJ37/tbH5vHlt2S0lvjphupLW/PdVF1ezIk

haGk1ya0qFiKfByXzdou3Ml4qzOemmozIAix5ooh4Cbq1Py6202SvbM7KYv89syk

HJNB4QWXLLWmgsHCuiXQXhRJz6jDAgMBAAECgYAIF5cSriAm+CJlVgFNKvtZg5Tk

93UhttLEwPJC3D7IQCuk6A7Qt2yhtOCvgyKVNEotrdp3RCz++CY0GXIkmE2bj7i0

fv5vT3kWvO9nImGhTBH6QlFDxc9+p3ukwsonnCshkSV9gmH5NB/yFoH1m8tck2Gm

BXDj+bBGUoKGWtQ7gQJBANR/jd5ZKf6unLsgpFUS/kNBgUa+EhVg2tfr9OMioWDv

MSqzG/sARQ2AbO00ytpkbAKxxKkObPYsn47MWsf5970CQQDIqRiGmCY5QDAaejW4

HbOcsSovoxTqu1scGc3Qd6GYvLHujKDoubZdXCVOYQUMEnCD5j7kdNxPbVzdzXll

9+p/AkEAu/34iXwCbgEWQWp4V5dNAD0kXGxs3SLpmNpztLn/YR1bNvZry5wKew5h

z1zEFX+AGsYgQJu1g/goVJGvwnj/VQJAOe6f9xPsTTEb8jkAU2S323BG1rQFsPNg

jY9hnWM8k2U/FbkiJ66eWPvmhWd7Vo3oUBxkYf7fMEtJuXu+JdNarwJAAwJK0YmO

LxP4U+gTrj7y/j/feArDqBukSngcDFnAKu1hsc68FJ/vT5iOC6S7YpRJkp8egj5o

pCcWaTO3GgC5Kg==

-----END PRIVATE KEY-----');



$password='xiaodisec';



//md5

echo "原始数据:$password". "<br/>";

echo "MD5加密后:".md5($password). "<hr/>";





//base64

echo "原始数据:$password". "<br/>";

echo "BASE64编码后:".base64_encode($password). "<hr/>";





//aes

echo "原始数据: " . $password . "<br/>";

$data = EncryptionTool::enAES($password, "1234567891234567");

echo "AES加密后: " . $data . "<hr/>";

//echo "解密后: " . EncryptionTool::deAES($data, "1234567891234567") . "<br/>";





//des

echo "原始数据:$password". "<br/>";

$key = 'key123456';

$iv = 'iv123456';

// DES CBC 加解密

echo 'DES CBC 加解密:';

$des = new DES($key, 'DES-CBC', DES::OUTPUT_BASE64, $iv);

echo $base64Sign = $des->encrypt($password);

echo "<br>";

//echo $des->decrypt($base64Sign);

echo "<hr>";

// DES ECB 加解密

echo "原始数据:$password". "<br/>";

echo 'DES ECB 加解密:';

$des = new DES($key, 'DES-ECB', DES::OUTPUT_BASE64);

echo $base64Sign = $des->encrypt($password);

echo "<hr>";

//echo $des->decrypt($base64Sign);





//rsa

//公钥加密 

$public_key = openssl_pkey_get_public(RSA_PUBLIC); 

if(!$public_key){

	die('公钥不可用');

}

//第一个参数是待加密的数据只能是string,第二个参数是加密后的数据,第三个参数是openssl_pkey_get_public返回的资源类型,第四个参数是填充方式

$return_en = openssl_public_encrypt($password, $crypted, $public_key);

if(!$return_en){

	return('加密失败,请检查RSA秘钥');

}

$eb64_cry = base64_encode($crypted);

echo "RSA公钥加密数据:".$eb64_cry;

echo "<br>";





//私钥解密

$private_key = openssl_pkey_get_private(RSA_PRIVATE);

if(!$private_key){

	die('私钥不可用');

}

$return_de = openssl_private_decrypt(base64_decode($eb64_cry), $decrypted, $private_key);

if(!$return_de){

	return('解密失败,请检查RSA秘钥');

}

echo "RSA私钥解密数据:".$decrypted;

echo "<hr>";





//私钥加密

$private_key = openssl_pkey_get_private(RSA_PRIVATE);

if(!$private_key){

	die('私钥不可用');

}

$return_en = openssl_private_encrypt($password, $crypted, $private_key);

if(!$return_en){

	return('加密失败,请检查RSA秘钥');

}

$eb64_cry = base64_encode($crypted);

echo "RSA私钥加密数据".$eb64_cry;

echo "<br>";



//公钥解密

$public_key = openssl_pkey_get_public(RSA_PUBLIC);

if(!$public_key){

	die('公钥不可用');

}

$return_de = openssl_public_decrypt(base64_decode($eb64_cry), $decrypted, $public_key);

if(!$return_de){

	return('解密失败,请检查RSA秘钥');

}

echo "RSA公钥解密数据:".$decrypted;

echo "<hr>";

?>

标签:逆向,AES,加密,RSA,echo,源码,key,密文,password
From: https://www.cnblogs.com/Ais0329/p/17652812.html

相关文章

  • 高级Android组件化、插件化强化实战,附大厂源码解析
    前言当今移动应用市场竞争激烈,为了在激烈的竞争中脱颖而出,开发人员需要不断提高应用性能,从而提高用户体验。而Android组件化和插件化技术则为优化性能提供了更好的方法。什么是组件化组件化技术是将一个大型的Android应用拆分成多个小模块或组件,每个组件负责不同的功能,通过组合不同......
  • 五脏俱全,搭建部署多人语音厅源码功能分析
    首先,要搭建部署一个稳定成熟的多人语音厅源码,具体的实现方式可能因项目需求以及使用的工具而有所不同,下边来简单分析下。搭建多人语音厅场景系统:场景功能如下。(1)多个麦位语聊:支持多人连麦及无限观众收听,并将麦位状态同步给房间内所有用户。(2)多人语音厅配置:参数可以按需配置,如码率、......
  • 直播网站程序源码,Java实现图片压缩
    直播网站程序源码,Java实现图片压缩1、Thumbnailator简介    对于图片处理,JDK中也提供了对应的工具类,不过处理起来会很麻烦,而Thumbnailator是一个Google开源的优秀图片处理的第三方Java类库,处理效果远比JavaAPI的好。    Thumbnailator可以使用很少的代码实现......
  • 直播网站源码,mysql,mariadb 密码忘记,修改密码
    直播网站源码,mysql,mariadb密码忘记,修改密码两种修改方法: 1、直接在shell命令行使用mysqladm命令修改。 #mysqladmin-uroot-poldpasswordpasswordnewpassword ​这种方法的弊端在于会明文显示密码。2、登陆数据库修改密码。 #mysql-uroot-p  2.1更新......
  • 配置反编译eclipse直接查看源码
    https://blog.csdn.net/chinaxiaofeng8/article/details/81773729?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-81773729-blog-122870963.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source......
  • TiDB 源码编译之 TiFlash 篇
    作者:ShawnYan导言TiFlash从去年四月一日开源至今已经过去将近一年半,这段时间里TiFlash从v6.0.0-DMR升级到了v7.3.0-DMR,并增加了若干新特性,比如支持MPP实现窗口函数框架,新增支持若干算子和函数下推,支持AWSS3算存分离等。先来回顾一下TiFlash资源精华帖,【重磅消息】......
  • 蛋糕店销售系统的设计与实现-计算机毕业设计源码+LW文档
    摘要随着信息技术的发展,基于web模式的购物系统逐渐普及,网上购物是一种新型的商务模式,其工作流程和经营模式受到了欢迎。电子商务可以适应现代化快节奏的生活方式,满足各类人群足不出户的在线购物,利用商城使得买卖双方完成线上交易,提高了购买效率。因此,开发一个适合商品在线选购的......
  • 课堂管理系统的设计与实现-计算机毕业设计源码+LW文档
    摘要随着互联网技术的推进,我国高等教育逐渐实现信息化。许多精品课堂管理系统的开发建设大大提高了教职工的教学效率,也为培养更多的高素质人才提供了途径。但是课堂管理系统的发展也存在交互性不强、资源更新缓慢、教学形式单一等问题。因此,笔者设想开发一个交互型的课堂管理系统......
  • 郑州商学院校园新闻管理系统的设计与实现计算机毕业设计源码
    摘要在互联网发展迅速的今天,人们已经开始习惯用网络来填充生活中的碎片时间。比如听歌、看视频、看新闻等,遇到自己喜欢的内容时并不一定有时间一次性看完。各种新闻内容存储在不同平台会不方便查找。郑州商学院校园新闻管理系统可以很好的解决这一问题,郑州商学院校园新闻管理系统......
  • 基于ssm的动漫推荐平台系统设计-计算机毕业设计源码+LW文档
    摘要随着信息技术的发展,基于web模式的管理系统逐渐普及,网上查找信息是目前广受欢迎的模式。基于ssm的动漫推荐平台系统可以适应现代化快节奏的生活方式,满足各类人群足不出户的在线查找动漫,利用基于ssm的动漫推荐平台系统可以获取动漫的信息,并可以和其他用户进行交流,提高了动漫的......