Day09:基础入门-算法逆向散列对称非对称JS源码逆向AESDESRSASHA

目录

算法加密-概念&分类&类型

加密解密-识别特征&解密条件

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

思维导图


章节知识点:

应用架构:Web/APP/云应用/三方服务/负载均衡等

安全产品:CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等

渗透命令:文件上传下载/端口服务/Shell反弹等

抓包技术:HTTP/TCP/UDP/ICMP/DNS/封包/代理等

算法加密:数据编码/密码算法/密码保护/反编译/加壳等

安全测试中:

  • 密文-有源码直接看源码分析算法(后端必须要有源码才能彻底知道)
  • 密文-没有源码1、猜识别 2、看前端JS(加密逻辑是不是在前端)

算法加密-概念&分类&类型

单向散列加密 -MD5

单向散列加密算法的优点有(以MD5为例):
方便存储,损耗低:加密/加密对于性能的损耗微乎其微。
单向散列加密的缺点就是存在暴力破解的可能性,最好通过加盐值的方式提高安全性,此外可能存在散列冲突。我们都知道MD5加密也是可以破解的。
常见的单向散列加密算法有:MD5 SHA MAC CRC

对称加密 -AES

对称加密优点是算法公开、计算量小、加密速度快、加密效率高。
缺点是发送方和接收方必须商定好密钥,然后使双方都能保存好密钥,密钥管理成为双方的负担。常见的对称加密算法有:DES AES RC4

非对称加密 -RSA

非对称加密的优点是与对称加密相比,安全性更好,加解密需要不同的密钥,公钥和私钥都可进行相互的加解密。缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。常见的非对称加密算法:RSA RSA2 PKCS

加密解密-识别特征&解密条件

md5密文特点

1、由数字“0-9”和字母“a-f”所组成的字符串
2、固定的位数 16 和 32位

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

Base64编码特点

1、大小写区分,通过数字和字母的组合
2、一般情况下密文尾部都会有两个等号,明文很少的时候则没有
3、明文越长密文越长,一般不会出现"/“”+"在密文中

AES,DES密文特点

同BASE64基本类似,但一般会出现"/“和”+"在密文中
解密需求:密文,模式,加密Key,偏移量,条件满足才可解出

RSA密文特点

特征同AES,DES相似,但是长度较长
解密需求:密文,公钥或私钥即可解出

如果明文是用公钥加密就只能用私钥解,明文是用私钥加密就只能用共钥解

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

1.密码存储,后端处理

1.查找源代码

2.通过源代码进行数值代入

3.写简单程序或者利用平台解码

源代码如下:

X3.2-md5&salt
DZ对应代码段-/uc_server/model/user.phpfunction add_user() {$password = md5(md5($password).$salt);}<?PHP
$h = 'd7192407bb4bfc83d28f374b6812fbcd';
$hash=md5(md5('123456').'3946d5');
if($h==$hash){echo 'ok';
}else{echo 'no';
}
?>

脚本编写思路

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));

btnPost=%E7%99%BB%E5%BD%95&username=admin&password=e10adc3949ba59abbe56e057f20f883e&savedate=1

墨者靶场-后端处理

解密的逻辑:base64解码两次再解密

正向sql注入加密

解密过程

1.获取密文

2.查看源码

3.进行反编译,得到数据

4.用注入语言按照密文加密顺序加密

5.获得用户名与数据库名称

3.test.php php加解密 php版本7.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>";?>

思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/513208.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Minio容器化部署并整合SpringBoot

1、启动minio容器 docker run -p 9000:9000 -p 9090:9090 --name minio -d --restartalways -e MINIO_ACCESS_KEYminio -e MINIO_SECRET_KEYminio -v /usr/local/minio/data:/data -v /usr/local/minio/config:/root/.minio minio/minio server /data --console-addr…

Day18:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构

目录 小程序获取-各大平台&关键字搜索 小程序体验-凡科建站&模版测试上线 小程序抓包-Proxifier&BurpSuite联动 小程序逆向-解包反编译&动态调试&架构 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系…

微信报修小程序源码

源码获取方式&#xff1a; 1、搜一搜 万能工具箱合集 然后点击资料库&#xff0c;即可获取资源 一、先看Demo&#xff08;已更新至4.0.0&#xff09; 想看界面图片的&#xff0c;辛苦你爬一下楼&#xff0c;点击下方查看资源&#xff0c;进入官方demo 二、功能介绍 1、当前版…

阿里云搭建私有docker仓库(学习)

搭建私有云仓库 首先登录后直接在页面搜索栏中搜索“容器镜像服务” 进入后直接选择个人版&#xff08;可以免费使用&#xff09; 选择镜像仓库后创建一个镜像仓库 在创建仓库之前我们先创建一个命名空间 然后可以再创建我们的仓库&#xff0c;可以与我们的github账号进行关联…

2024第十二届济南国际生物发酵产品与技术装备展览会胜利开幕

聚焦生物新产品新技术 引领生物产业发展新趋势 3月5日&#xff0c;2024第十二届济南国际生物发酵产品与技术装备展览会在济南市山东国际会展中心隆重举行。这次展览会&#xff0c;由中国生物发酵产业协会主办&#xff0c;山东省生物发酵产业协会协办&#xff0c;上海信世展览…

Zookeeper:常见的面试题和答案

1、什么是Zookeeper&#xff1f;它的作用是什么&#xff1f; 答&#xff1a; Zookeeper是一个开源的分布式协调服务&#xff0c;提供了一些基本的分布式服务&#xff0c;如配置管理、分布式锁、分布式队列等。其主要作用是帮助分布式应用程序进行协调和管理&#xff0c;确保分…

【剑指offer】C++ 翻转字符串里面的单词

目录 题目&#xff1a; 思路&#xff1a; 代码出现 结果 题目&#xff1a; 给定一个字符串&#xff0c;逐个翻转字符串中的每个单词。 示例 1&#xff1a; 输入: "the sky is blue" 输出: "blue is sky the" 示例 2&#xff1a; 输入: " hello…

289页初中级前端题助你拿下Offer,web前端开发面试技巧

HTML面试题部分 1.H5的新特性有哪些 2.Label的作用是什么&#xff1f;是怎么用的&#xff1f; 3.HTML5的form如何关闭自动完成功能 4.dom如何实现浏览器内多个标签页之间的通信? 5.实现不使用 border 画出1px高的线&#xff0c;在不同浏览器的标准模式与怪异模式下都 能保持一…

数字化转型导师坚鹏:银行业科技产品及零售贷款咨询方法与案例

银行业科技产品及零售贷款咨询方法与实战案例 课程背景&#xff1a; 数字化转型背景下&#xff0c;很多机构存在以下问题&#xff1a; 不知道银行业科技产品咨询方法&#xff1f; 不知道零售贷款咨询方法与案例&#xff1f; 不知道信贷中台咨询方法与案例&#xff1f; …

Redis 7.0版本主从复制机制

1、引言 Redis是一个开源、高性能、内存键值存储系统&#xff0c;同时也提供了数据结构服务器的功能。它支持五种主要的数据类型&#xff1a;字符串&#xff08;String&#xff09;、哈希表&#xff08;Hashes&#xff09;、列表&#xff08;Lists&#xff09;、集合&#xff…

建立网络防御时需要重点考虑的10个因素

互联网安全中心&#xff08;CIS&#xff09;建议企业可以从以下10个因素入手&#xff1a;资产管理、数据管理、安全配置、账户和访问控制管理、漏洞管理、日志管理、恶意软件防御、数据恢复、安全培训和事件响应。 1、资产管理 建立网络防御的第一步是制定企业资产和软件资产的…

【Godot4自学手册】第二十节增加游戏的打击感,镜头震颤、冻结帧和死亡特效

这节我主要学习增加游戏的打击感。我们通过镜头震颤、冻结帧、增加攻击点特效&#xff0c;增加死亡。开始了。 一、添加攻击点特效 增加攻击点特效就是&#xff0c;在攻击敌人时&#xff0c;会在敌人受击点显示一个受击动画。 1.添加动画。 第一步先做个受击点动画。切换到…