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.pswp.cn/news/714089.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714089.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714089.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電子科技大學《數據庫原理及應用》(持續更新)

前言 電子科技大學的數據庫課程縮減了部分的課時&#xff0c;因此&#xff0c;可能并不適合所有要學習數據庫的寶子們&#xff0c;但是&#xff0c;本人盡量將所有數據庫的內容寫出來。本文章適用于本科生的期中和期末的復習&#xff0c;電子科技大學的考生請在復習前先看必讀…

MySQL相關知識匯總

MySQL是一個廣泛使用的開源關系型數據庫管理系統&#xff0c;它以其高性能、穩定性和易用性而備受開發者喜愛。在軟件開發領域&#xff0c;無論是大型項目還是小型應用&#xff0c;MySQL都扮演著重要的角色。本文將對MySQL的一些關鍵知識點進行匯總&#xff0c;幫助讀者更好地了…

5. informer源碼分析-概要分析

k8s client-go k8s informers 實現了持續獲取集群的所有資源對象、監聽集群的資源對象變化功能&#xff0c;并在本地維護了全量資源對象的內存緩存&#xff0c;以減少對 apiserver、對 etcd 的請求壓力。Informers 在啟動的時候會首先在客戶端調用 List 接口來獲取全量的對象集…

C++中boost庫的安裝及使用(Windows)

Boost庫的安裝及使用 引言使用現有的boost庫安裝及使用引言 C++開發中經常會用到boost庫,本文記錄一下Windows上boost在visual studio2019上的使用。 Boost庫是一個跨平臺的C++庫集合,旨在為C++開發者提供一系列高質量的通用功能。不同的Visual Studio(VS)版本并不要求安…

日常科研中經常使用的命令

Linux目錄樹狀結構 1. Windows是磁盤分區&#xff0c;Linux不區分盤符&#xff0c;所有文件都在根目錄斜線下面&#xff1b; 2. 根目錄顯示不同&#xff0c;Linux是一個斜線&#xff0c;而windows是盤符&#xff0c;然后冒號&#xff1b; 3. 分割目錄Linux用斜線&#xff0c…

React編寫組件時,如何省略.tsx后綴

省略.tsx后綴 當tsconfig.json配置了&#xff0c;需要重啟后才會生效 {"compilerOptions": {"allowJs": true,"jsx": "react-jsx",} }當進行以上配置后&#xff0c;導入組件時添加后綴&#xff0c;Eslint報錯如下&#xff1a; An im…

【算法集訓】基礎算法:基礎排序 - 冒泡排序

一、基本理解 貼上圖解&#xff0c;更容易理解代碼&#xff1a;https://visualgo.net/zh/sorting 冒泡排序(Bubble Sort)又稱為泡式排序&#xff0c;是一種簡單的排序算法。 核心思想&#xff1a; 它重復地走訪過要排序的數列&#xff0c;一次比較兩個元素&#xff0c;如果它…

性能比較:in和exists

當在Hive SQL中使用NOT IN和NOT EXISTS時&#xff0c;性能差異主要取決于底層數據的組織方式、數據量大小、索引的使用情況以及具體查詢的復雜程度。下面是對這兩種方法的性能分析&#xff1a; 1. NOT IN&#xff1a;- 工作原理&#xff1a;NOT IN子查詢會逐個比較主查詢中的值…

化肥工業5G智能制造工廠數字孿生可視化平臺,推進化肥行業數字化轉型

化肥工業5G智能制造工廠數字孿生可視化平臺&#xff0c;推進化肥行業數字化轉型。隨著科技的不斷發展&#xff0c;數字化轉型已經成為各行各業發展的必然趨勢。在化肥工業領域&#xff0c;5G智能制造工廠數字孿生可視化平臺的應用正在逐漸普及&#xff0c;為行業數字化轉型提供…

Java 循環結構 - while ,do…while 及 for,

目錄 Java中有三種主要的循環結構&#xff1a; while 循環 實例 do…while 循環 實例 for循環 實例 三種循環之間的區別 增強 for 循環 實例 break 關鍵字 語法 實例 continue 關鍵字 語法 實例 順序結構的程序語句只能被執行一次。 如果您想要同樣的操作執行…

租用云服務器租時要注意的問題有哪些?

隨著云計算的不斷發展&#xff0c;對云計算服務器的需求也越來越大。 那么&#xff0c;我們應該如何以正確的態度和方法來選擇云服務器呢&#xff1f; 租用云服務器需要注意哪些問題&#xff1f; 1.了解您需要的云服務類型 了解您的云計算需求將使您了解您正在尋求的服務類型…

web運行時安全

1.輸入驗證 對傳遞的數據的格式、長度、類型&#xff08;前端和后端都要&#xff09;進行校驗。 對黑白名單校驗&#xff1a;比如前端傳遞了一個用戶名&#xff0c;可以搜索該用戶是否在白名單或者黑名單列表。 針對黑名單校驗&#xff0c;比如&#xff1a; // 手機號驗證…

讓兩個電腦通信的方法(TCP連接,UDP連接,C/S架構)

目錄 TCP-面向連接UDP-面向無連接C/S架構服務器和客戶端的工作過程C/S架構例子 讓兩個電腦通信的方法是 在C/S的基礎上&#xff0c;采用TCP和UDP的方式連接 TCP-面向連接 UDP-面向無連接 C/S架構 服務器和客戶端的工作過程 C/S架構例子 服務器與客戶端通信的過程類似公司與客戶…

微信小程序云開發教程——墨刀原型工具入門(添加交互事件)

引言 作為一個小白&#xff0c;小北要怎么在短時間內快速學會微信小程序原型設計&#xff1f; “時間緊&#xff0c;任務重”&#xff0c;這意味著學習時必須把握微信小程序原型設計中的重點、難點&#xff0c;而非面面俱到。 要在短時間內理解、掌握一個工具的使用&#xf…

殿堂級Flink源碼極精課程預售

一、為什么我們要讀源碼? 1、讓個人技術快速成長: 優秀的開源框架,底層的源碼設計思想也非常優秀,同時還有含有大量的設計模式和并發編程技術&#xff0c;優秀的解決方案,熟讀源碼對猿們技術提升有很大幫助 2、新技術學習能力: Java開源碼框架的源碼熟讀后&#xff0c;若出現…

第一篇:參考資料地址

javaGuide JavaGuide&#xff08;Java學習&面試指南&#xff09; | JavaGuide 清華學生總結的 小林coding labuladong labuladong 的算法筆記 | labuladong 的算法筆記 【華仔說技術】kafka的系列文章 https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg3MTcxMDgxNA…

【Datawhale組隊學習:Sora原理與技術實戰】Sora技術原理

Sora能力邊界探索 最大支持60秒高清視頻生成&#xff0c;以及基于已有短視頻的前后擴展&#xff0c;同時保持人物/場景的高度一致性如奶茶般絲滑過渡的視頻融合能力同一場景的多角度/鏡頭的生成能力具有動態攝像機運動的視頻。隨著攝像機的移動和旋轉&#xff0c;人和其 他場景…

x-pack的破解方式和免費jar包!!可直接用!!

原理介紹 我們平時為es安裝x-pack組件&#xff0c;用elasticsearch-plugin install x-pack &#xff0c;安裝成功后。 1.cd $es目錄/pulgins/x-pack 里面有一個x-pack-5.6.2.jar &#xff0c;將jar包反編譯&#xff0c;然后將里面的licence的程序改下。再編譯成jar包。 2…

通過筆記本橋接打印機組成網絡打印機其它電腦與之相連各種問題匯總

根據描述需要一臺低配閑置筆記本&#xff08;有無線網卡&#xff09;&#xff0c;一臺普通臺式打印機&#xff08;不帶WIFI&#xff09;就可以組成網絡打印機&#xff0c;能省1000塊不&#xff1f; 1. 讓筆記本安裝驅動使其可以打印。 2. 讓筆記本上的打印機共享&#xff0c;…

解決 MacOS Sonoma 14 系統下修改用戶名無法進入系統的歷史Bug

蘋果系統祖傳Bug概述 在MacOS中如果在系統偏好設置/用戶和群組中嘗試修改用戶名或用戶ID&#xff0c;當且僅當只有一個管理員賬號的時候重啟&#xff0c;就可能面臨到無法進入操作系統&#xff0c;即使出現了登錄框&#xff0c;但是一直是 loading狀態在這個期間&#xff0c;你…