web安全学习笔记【09】——算法2

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

#知识点:

1、Web常规-系统&中间件&数据库&源码等

2、Web其他-前后端&软件&Docker&分配站等

3、Web拓展-CDN&WAF&OSS&反向&负载均衡等

-----------------------------------

1、APP架构-封装&原生态&H5&flutter等

2、小程序架构-Web&H5&JS&VUE框架等

-----------------------------------

1、渗透命令-常规命令&文件上传下载

2、反弹Shell-防火墙策略&正反向连接

3、数据回显-查询带外&网络协议层级

-----------------------------------

1、抓包技术-HTTP/S-Web&APP&小程序&PC应用等

2、抓包工具-Burp&Fidder&Charles&Proxifier

-----------------------------------

1、抓包技术-全局-APP&小程序&PC应用

2、抓包工具-Wireshark&科来分析&封包

-----------------------------------

1、存储密码加密-应用对象

2、传输加密编码-发送回显

3、数据传输格式-统一格式

4、代码特性混淆-开发语言

-----------------------------------

1、单向散列加密 -MD5,HASH

2、对称加密 -AES DES

3、非对称加密 -RSA

4、解密-识别&需求&寻找(前后端)&操作

#章节点

应用架构:Web/APP/云应用/小程序/负载均衡等

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

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

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

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

演示案例:

  • 算法加密-概念&分类&类型
  • 加密解密-识别特征&解密条件
  • 解密实例-密文存储&数据传输

安全测试中:

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

密文-没有源码1、猜识别 2、看前端JS(加密逻辑是不是在前端)

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

1. 单向散列加密 -MD5

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

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

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

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

MD5 SHA MAC CRC

2. 对称加密 -AES

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

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

常见的对称加密算法有:

DES AES RC4

3. 非对称加密 -RSA

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

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

常见的非对称加密算法:

RSA RSA2 PKCS

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

MD5密文特点:

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

2、固定的位数 16 和 32位

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

BASE64编码特点:

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

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

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

AES、DES密文特点:

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

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

RSA密文特点:

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

解密需求:密文,公钥或私钥即可解出

AES加密主要在于Key值

DES加密主要是Key和iv值,即密码和偏移量

非对称加密RSA  公钥私钥

解密方式:如果对方用公钥加密,只有私钥也能解密,但用公钥无法解密

如果对方用私钥加密,只有公钥也能解密,但用私钥无法解密

其他密文特点见:

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

-墨者靶场-(后端处理)

-1 union select 1,database(),user(),4_mozhe

xgd58ipTrnx8VzSBJicqCibZxIRsZKgXOYUrNQP8fCCtx9JZ+6K1hHt7RKkzV305

eGdkNThpcFRybng4VnpTQkppY3FDaWJaeElSc1pLZ1hPWVVyTlFQOGZDQ3R4OUpaKzZLMWhIdDdSS2t6VjMwNQ==

//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>";

?>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2.数据结构 顺序表(自留笔记)

文章目录 一.静态顺序表&#xff1a;长度固定二.动态顺序表1.下面证明原地扩容和异地扩容代码如下&#xff1a;2.下面是写一段Print&#xff0c;打印数字看看&#xff1a;3.头插4.尾删5.头删6.越界一定会报错吗7.下标插入8.下标删除9.查找数字10.应用&#xff1a;利用顺序表写一…

跨平台同步 Shell 历史记录,无缝切换会话 | 开源日报 No.154

atuinsh/atuin Stars: 14.3k License: MIT Atuin 是一个用 SQLite 数据库替换现有 shell 历史记录的工具&#xff0c;可以记录命令的额外上下文&#xff0c;并提供可选且完全加密的历史同步功能。其主要功能和核心优势包括&#xff1a; 重新绑定 ctrl-r 和 up (可配置) 到全屏…

安装宝塔面板后k8s所在节点pod无法正常工作解决方法,kubernetes k8s 与宝塔面板冲突解决方法

在实际项目过程中我们使用了k8s 在生产环境中运行管理服务。 但是对服务器的状态管理我们使用了宝塔面板进行 K8s 版本1.2.8 宝塔面板 版本 8.05 操作步骤是这样的。 1.完成1.2.8 k8s的节点安装&#xff0c;并正常运行服务。 过程略 2.安装宝塔面板 ​ yum install -y …

不要在细节上雕花

前段时间在网上看到一张趣图,有人在社交网络分享学习编程的笔记,一行行手抄代码,字迹清晰,排版工整,霎是认真。 这可能只是个梗,但它让我想起我的学生年代。许多年前我还在念书的时候,班上有不少非常认真的同学,热衷于把课堂笔记做得非常漂亮、工整,有些甚至要用尺子对…

vue —— h函数的学习与使用

文章目录 一、h函数是什么&#xff1f;二、h函数格式说明及使用示例1&#xff1a;简单创建一个VNode&#xff08;vue3&#xff09;示例2&#xff1a;vue2中h函数用法示例3&#xff1a;vue3中h函数的用法vue2和vue3中h函数的区别&#xff1f; 三、h函数实现原理四、h函数常用场景…

java每日一记 —— MySQL窗口函数的使用

MySQL窗口函数 1.什么时窗口函数2.窗口函数的基本应用2.1.排序函数2.2.分布函数2.3.前后函数2.4.头尾函数2.5.聚合函数2.6.其他函数 窗口函数时MySQL8.0中的 注意&#xff1a;窗口函数也有人称为“开窗函数” 1.什么时窗口函数 引入问题&#xff1a;让我们从一个实际的问题开始…

redis排序

文章目录 简介SORT命令的实现ALPHA选项的实现ASC和DESCBYLIMITGET命令 类似映射STORE选项的实现多个命令的执行顺序 简介 Redis的SORT命令可以对列表键、集合键或者有序集合键的值进行排序。 SORT命令的实现 服务器执行SORT numbers 命令的详细步骤如下&#xff1a; 1&#…

在windows安装python版本的tensorrt

文章目录 一、进入官网&#xff0c;下载tensorrt包二、下载后解压并把相应文件拷入对应cuda的文件夹2.1 拷贝头文件2.2 拷贝静态库2.3 拷贝动态库 三、安装whl文件四、验证 一、进入官网&#xff0c;下载tensorrt包 https://developer.nvidia.com/tensorrt-download 这里需要…

接口文档swagger2的使用

Spring-接口文档swagger2 1、swagger/knife4j 接口文档配置 ​ knife4j是swagger的增强版本&#xff0c;更加的小巧、轻量&#xff0c;功能也是更加的完善&#xff0c;UI也更加的清晰&#xff1b;可以从swagger到knife4j无缝切换。 1.1 引入相关依赖 <!--接口文档的开发:…

【Tailwind】各种样式的进度条

基本样式进度条&#xff1a; <div class"mb-5 h-2 rounded-full bg-gray-200"><div class"h-2 rounded-full bg-orange-500" style"width: 50%"></div> </div>带文字的进度条&#xff1a; <div class"relativ…

销售退货单单据录入的序列号当前单据类型不在允许范围内

文章目录 销售退货单单据录入的序列号当前单据类型不在允许范围内报错截图原因分析 销售退货单单据录入的序列号当前单据类型不在允许范围内 报错截图 销售退货单保存 原因分析 销售退货单序列号录入设置&#xff1a; 报错不满足条件的序列号&#xff0c;最后出库是 其他…

golang整合rabbitmq,创建交换机并绑定队列

1,如果要开发消息队列,需要创建交换机和队列,通常有2中方式创建,1种是在面板直接创建 2,第二种就是在代码中创建,这里 展示的是go语言代码中创建rabbitmq package mainimport ("fmt""log""github.com/streadway/amqp" )func main() {// 连接R…

Java 枚举和注解

一、枚举类 把具体的对象一个一个例举出来的类就称为枚举类 枚举对应英文(enumeration, 简写 enum)枚举是一组常量的集合。可以这里理解&#xff1a;枚举属于一种特殊的类&#xff0c;里面只包含一组有限的特定的对象。 1.实现方式1——自定义类实现枚举 public class Enume…

前端面试题:topK算法

当面试官问你&#xff0c;在不考虑数字越界的情况下&#xff0c;有1亿条搜索数据&#xff0c;让你从中找到前100条频率高的数据你会怎么实现&#xff1f; 当时&#xff0c;我的第一印象是把数据分组&#xff0c;分别求前多少条&#xff1f;但是没法保证每组的前100条或者多少条…

关于Linux系统的目录结构介绍常用命令介绍

目录 一. Linux系统目录结构介绍 二. 一些常用命令的介绍 1、# 与 $的区别 2、ifconfig 3、su 4、cd 5、目录查看 6、查看文件内容 7、创建目录及文件 8、复制和移动 9、其他 10、tar 11、which 12、whereis 13、find 14、chmod 三. vim的基本使用 四. SSH密…

【推荐100个unity插件之16】3D物品描边效果——Quick Outline免费插件

文章目录 前言地址介绍使用例子完结 前言 关于3D描边&#xff0c;其实之前有用shader弄过一个&#xff1a;【实现100个unity特效】shader实现3D物品闪光和描边效果 但是很遗憾的是他不支持URP项目&#xff0c;所以现在推荐这款插件&#xff0c;他能很好的支持URP&#xff0c;…

MyBatis中一级缓存是什么?SqlSession一级缓存失效的原因?如何理解一级缓存?

一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就 会从缓存中直接获取&#xff0c;不会从数据库重新访问 使一级缓存失效的四种情况&#xff1a; 1) 不同的SqlSession对应不同的一级缓存 2) 同一…

蓝桥杯备赛 week 3 —— 高精度(C/C++,零基础,配图)

目录 &#x1f308;前言&#xff1a; &#x1f4c1; 高精度的概念 &#x1f4c1; 高精度加法和其模板 &#x1f4c1; 高精度减法和其模板 &#x1f4c1; 高精度乘法和其模板 &#x1f4c1; 高精度除法和其模板 &#x1f4c1; 总结 &#x1f308;前言&#xff1a; 这篇文…

电饼铛行业研究:中国市场规模整体上涨趋势明显

电饼铛是一个烹饪食物的工具&#xff0c;单面或者上下两面同时加热使中间的食物经过高温加热&#xff0c;达到烹煮食物的目的。电饼铛也叫烤饼机&#xff0c;可以灵活进行烤、烙、煎等烹饪方法&#xff0c;有家用小款型和店面使用大款两种。 大型的电饼铛具有自动上下火控温…

Python基础语法:代码规范、判断语句与循环语句

目录 一、代码规范 二、判断语句 三、循环语句 总结&#xff1a; Python是一种高级、动态类型的编程语言&#xff0c;其语法清晰、简洁&#xff0c;易于学习。本文将介绍Python基础语法中的代码规范、判断语句和循环语句。 一、代码规范 良好的代码规范可以提高代码的可读…