接口安全测试面试常见问题
1. MD5加密不可逆,到底有什么用呢?
参考回答:
1)MD5算法特点:
- 定长性:对不同的数据加密的结果是定长字符(不管文件多大都一样)
- 结果一致性:对相同的数据加密,得到的结果是一样的
- 容易计算:从原数据计算出MD5值很容易
- 抗修改性:信息“指纹”,对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别
- 弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的
- 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的
- 不可逆性:MD5加密过程本身就是一个有损的加密过程,因此几乎不可能还原出原始数据
2)实际应用:
❶ 密码加密
对于用户密码这样的关键数据,在传输、存储过程中都有可能造成泄漏,加密的意义在于,即使别人获得了密码的加密密文,只要密码的原文具有一定的复杂性,要解密出原始密码,也需要花费极大的时间和算力成本才能实现。而验证密码的正确性完全无需对密码密文进行解密,利用MD5的“相同数据,MD5结果一致”的特性,在我们知道该密码对应的MD5值情况下,只需对密码原文再次做MD5加密,然后对加密密文与之进行比对,如一致则密码正确,不一致则密码不正确。当然,对于手机号、地址等需要解密还原的数据,就不能通过MD5直接加密存储了。
❷ 签名校验
数据在传输过程中,很有可能被截获并篡改,这时候就可以将传输的数据通过MD5生成签名,同样利用MD5的“相同数据,MD5结果一致”的特性,如果数据被篡改,签名就会发生变化,从而验证数据是否被篡改。具体的过程如下:
- 将数据data加上key值做MD5加密,生成sign签名:sign = MD5(data + key)
- 同时发送data和sign值给服务端
- 服务端收到data和sign之后,对data同样加key进行MD5加密,生成sign1
- 比较sign1与sign,如果相同,说明客户端原始的data与服务端收到的data是一致的,data没有被篡改,如果不同,说明data值有变动,可能数据被篡改。
❸ 文件校验
对于大文件上传的场景,一般的处理方式是进行分片上传,也就是所谓的断点续传,如果有一个10MB的文件,客户端把它分割成2份5MB的文件,在上传的时候,需要上传两个MD5值,一个是第一份5MB文件的MD5,还有一个完整文件的MD5,这样就能保证文件的完整性。另外,一些开发软件及游戏软件在下载页面也会提供对应资源包的MD5值,用户下载资源包后可以查看MD5是否与官网提供的一致,如不一致,则有可能下载包不完整或者官网的资源包被替换。
2. MD5加盐的目的是什么呢?
参考回答:
加盐的目的是加强加密的复杂度,使破解的难度更大。MD5虽然不可逆,但是如果密码设置得不够复杂,被破解出来的可能性还是比较大的。如果将常用的密码执行 MD5做成一个数据量非常庞大的数据字典,然后对泄露的密码进行对比,那么那些跟字典库中的值一致的原始密码就能够匹配出来。
“盐(Salt)”可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的。以密码为例,每个用户的 Salt 都不一样,用户注册的时候,数据库中存入的不是明文密码,也不是简单的对明文密码进行散列,而是 MD5( 明文密码 + Salt),如下示例:
- MD5('123456' + '300c008b11031c0d5ed3463e23') = '4e18fa4be60ee0b2886320a
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> 本专刊共五章 21 篇正文及 5 个对应的 GitHub 项目,主要介绍了接口测试基础知识及测试用例设计方法,认证鉴权、加密验签,自动化测试,安全性测试,性能测试等内容,每一章节都有代码实例来剖析其原理,并提供了一个完整电商系统的代码,可以直接实操演练,让你知其然知其所以然,轻松搞定接口测试。加入专刊,你就加入了一大群志同道合的优质测试人圈子,同时还有和作者及作者的朋友们互动交流的机会。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>