编码加密

附:完整笔记目录~
ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正!

4.2 编码加密

  1. 引子:上一篇主要对常见数据传输类型做了总结,而本篇则对数据常见的编码&加密方式进行总结。

  2. 概述:编码&加密除了对后端敏感数据的保护,其在前端数据传输时往往也会被应用到。
    根据上一篇的学习,我们可以注意到,除二进制格式外,其余大部分传输格式中数据都是明文传输,这导致其向服务端传递的数据可以被任何人随意修改,也给了攻击者攻击的可能。
    为了避免这种情况的发生,开发者往往会先对需要传递的数据进行编码&加密再传输。这样当攻击者想要修改传递的数据时,必须也依据开发者所规定的编码&加密方式先对payload进行编码加密,提高了门槛,增加了攻击难度。

  3. 编码&Base64

    1. 概念:Base64编码会将每三个字节的二进制数据转换为4个字符的ASCII文本。

    2. 例子

      原数据:sjjjjjjer 666

      编码后数据:c2pqampqamVyIDY2Ng==

    3. 特征

      1. 明文越长编码后文本越长
      2. 大小写区分,数字&字母组合
      3. 编码后,一般不会存在 / 和 + ,且文本末可能会存在两个=
  4. 编码&URL

    1. 概念:URL编码用于将URL中非ASCII字符或特殊字符转换为以 % 开头的编码,因此也称百分号编码。

    2. 例子

      原数据:example.com/sjjjjjjer 666.html

      编码后数据:example.com%2Fsjjjjjjer%20666.html

    3. 特征

      URL格式再带 % ,基本均为URL编码。

  5. 加密&哈希算法

    1. 概念:哈希算法通过单向函数将数据转换为固定长度的字符串。常见的哈希算法如MD5、SHA等,以32位MD5为例。

    2. 例子

      原数据1:sjjjjjjer 666

      加密后数据1:49d8622c7fd08ed03638ee7228bf697a

      原数据2:sjjjjjjer

      加密后数据2:3c81489c7d3a09c6ad3eb60d9052d6c2

    3. 特征

      1. 固定位数,MD5加密为16或32位。
      2. 16进制字符串,即由 0-9 a-f 组成。
      3. 单向函数加密造成MD5算法不可逆,因此仅能通过密文碰撞破解。
  6. 加密&对称加密

    1. 概念:最传统加密方式,加解密共用同一密钥。常见的对称加密算法,如AES、DES、3DES等,由于AES更为可靠(密钥最低位数为128位),因此也是如今使用最多的对称加密方式。本篇以AES为例。

    2. 例子

      使用AES加密时,不仅仅需要双方规定密钥,同样也需规定偏移量、加密模式、填充。由于加密模式&填充仅有固定的几种类型,因此在对称加密中除密钥外最重要的也就是偏移量了。

      原数据:sjjjjjjer 666

      密钥:1234567890abcdef

      偏移量:1234567890abcdef

      加密模式&填充:ECB&zeropadding

      加密后数据(以Base64输出):rG0zMqyClmJE9Ldmj6BWQQ==

    3. 特征

      基本同Base64,但密文一般会出现 / 和 + 。

  7. 加密&非对称加密

    1. 概念:与对称加密不同,非对称加密加解密采用一对密钥,一般情况下使用公钥进行加密,私钥解密(公钥公开,私钥保密)。但这并不意味着仅能使用公钥加密,在非对称加密中私钥也可以用来加密,相应的应使用公钥解密,这也是我们常说的私钥签名,公钥验签。
      常见的非对称加密算法,RSA(最著名)、ECC(基于椭圆曲线...)。本篇以RSA为例

    2. 例子(公私钥为平台示例)

      原数据:sjjjjjjer 666

      公钥:

      -----BEGIN PUBLIC KEY-----
      MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDHc+PP8LuTlBL1zCX+lh9kcur
      gHHIXFnV/tDK789DaJuhwZvQ1lu5Zdcn+ULbNUKkB6b5tCP0sZxlpoCVKMyKHtde
      h/YGXwBD8sMc+XcRs0eh3/tyr4EoBu3bomzHWDGmHjH/F5GotFTrGcB6xQwAROy4
      mT5SketlQ3c7tucI+QIDAQAB
      -----END PUBLIC KEY-----
      

      加密后数据(以base64输出):XJvQMLNI8355fRZ/1SE33DjtwmX4zWFezYSesV/lD6JLv6amBoaodg5lyZd+vOZos603l19j3tjb9NnnguXYd3MCuyw33Y4FtjuVeRlnuBc/ddWvHlR19LJcuZbSMy/id1twJa8CFKDOskeN87SmwzHpLD289pMtlEmop/F7Xn8=

      私钥:(详见平台,实在太长了就不粘了)

      解密后数据:sjjjjjjer 666

    3. 特征

      基本同AES,但密文长度较长。

      补:在线对称&非对称加解密平台,http://tool.chacuo.net/cryptrsapubkey

  8. 加密&自定义

    1. 概念:开发者自定义加密算法(一般基于非对称/对称加密改良),往往被应用于加密传输数据。

    2. 例子(以某通登录框为例)

      image-20241204200435038

      显然,这种密文格式并不符合我上述所提到的几种,称这种加密方式为自定义加密。那当我们遇到这种加密方式该怎么办呢?
      由于所有加密操作均在发包前也就是前端实现,那我们能不能通过调试找到前端开发者自定义的加密算法代码呢,若能成功找到,是不是就可以利用开发者的加密代码加密我们的payload,从而绕过自定义加密进行测试呢。这也是我们所常说的JS逆向。

  9. 总结&再扩展
    由上文的介绍,我们对不同的编码&加密方式有了基本的认知,那当遇到了编码加密的情况时该如何解决呢?由于编码&加密往往存在两种应用场景,因此分别对这两种场景进行讨论。

    数据类型/应用场景 后端敏感数据 前端数据加密传递
    编码(Base64) 反编码 payload Base64编码
    哈希加密(MD5) 在线平台/脚本碰撞解密 payload MD5加密
    对称加密(AES) 找密钥&偏移量,逆向解密 前端找密钥&偏移量加密payload
    非对称加密(RSA) 找私钥,同上 前端找公钥加密payload
    自定义加密 后端找解密算法??? 前端找加密算法,利用开发者自己的算法加密
    (注:上述加密类型也可用该方法,依据实际情况选择)
posted @ 2024-12-04 23:24  1999er  阅读(70)  评论(0)    收藏  举报