弱编码:程序之间的沟通语言安全吗?

本文介绍了弱编码的概念,以编码与加密的区别、URL编码、Base64编码为例,探讨编码在程序中的应用。并通过宽字节注入和CVE-2021-42574案例分析编码安全问题,强调理解编码逻辑在开发中的重要性。
摘要由CSDN通过智能技术生成

你好,我是王昊天。

进入了加密失败这个大篇章,我们的第一个话题就是——弱编码。

如果你想了解什么是编码,那么不妨想象一下双十一购物的场景吧。

我们通过电商平台购买了许多零食、家居用品以及二次元手办,一时下单一时爽,一直下单一直爽,于是全国人民都在买买买。这个时候电商平台的难题来了,各式各样的商品要如何送到每个人手里呢?总不能每一种商品打造一条运输线路。

于是快递出现了,通过对不同类型的商品进行方形硬纸盒的封装,既保护了商品在运输中的完整性,又保证了传输的便捷性。

这就是编码的典型场景,在服务端与客户端传输数据的过程中,我们无法确认传输的内容中是否包含传输协议不支持的内容,因此在数据传输之前我们希望通过编码的方式将传输数据进行规范化。

这里一定要注意,编码是不具备保密性的。就像快递小哥只是不想知道包装里面是什么东西,如果他想知道的话,应该是一件不难事。

编码

我们来看看维基百科是如何定义编码的:

编码是信息从一种形式或格式转换为另一种形式的过程;解码则是编码的逆过程。

作为一名优雅的开发工程师,或者是一名“大黑客”,掌握多种编码特征都是非常重要的,这一讲,我就来带你进入编码的世界遨游一番。

字符编码

字符编码是把字符集中的字符映射为指定集合中的某一个对象,以便文本在计算机中存储或者在网络之间传递。在计算机发展的早期,ASCII这样的字符集是字符编码的标准形式,但是这些字符集有着很大的局限性,比如只适用于英文场景等,于是人们开发了许多方法来扩展它们,编码的类型也逐步丰富:

  • 早期标准:ASCII、EBCDIC
  • 西欧标准:ISO-8859-1、ISO-8859-5、ISO-8859-6、ISO-8859-7、ISO-8859-11、ISO-8859-15等
  • DOS字符集:CP437、CP737、CP850等
  • Windows字符集:Windows-1250、Windows-1251、Windows-1252等
  • 中文:GB2312、GBK等
  • Unicode:Unicode、UTF-7、UTF-8、UTF-16、UTF-32等

这些字符集有各自的诞生意义和应用场景,在我们日常工作中会经常遇到其中的某一些,这里我们选取几个有代表性的字符集来深入研究:

ASCII ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是最常用的编码,来表示字母、数字以及常用符号。如果你正在使用Mac或者Linux类型系统,可以直接使用如下命令来查看所有的ASCII字符:

> man ascii
ASCII(7)             BSD Miscellaneous Information Manual             ASCII(7)

NAME
     ascii -- octal, hexadecimal and decimal ASCII character sets

DESCRIPTION
     The octal set:

     000 nul  001 soh  002 stx  003 etx  004 eot  005 enq  006 ack  007 bel
     010 bs   011 ht   012 nl   013 vt   014 np   015 cr   016 so   017 si
     020 dle  021 dc1  022 dc2  023 dc3  024 dc4  025 nak  026 syn  027 etb
     030 can  031 em   032 sub  033 esc  034 fs   035 gs   036 rs   037 us
     040 sp   041  !   042  "   043  #   044  $   045  %   046  &   047  '
     050  (   051  )   052  *   053  +   054  ,   055  -   056  .   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值