作者:AmenTo_AT | 来源:互联网 | 2023-09-12 13:55
在测试过程中,我们经常会遇到接口数据加密、数据库密码加密怎么测试等问题,很多同学立马被吓退了。算法1:base64这不是加密算法,它叫做编码算法。比如:base64的特征是尾部经常
测试过程中,我们经常遇到接口数据加密、数据库密码加密如何测试等问题,很多同学很快就吓了一跳。
事实上,只要有耐心,测试过程的一般加密算法并不太难,有些不是加密算法。
密码学是一门比较模糊的科学。 电影《模仿游戏》是包括图灵在内的几位顶级数学家解读德军军事情报的故事。 但是,在工作中,不需要理解密码学的基础原理。 只要知道他们是怎么使用的就行了。
本文列举了测试和开发过程中最常用的算法,揭开了所谓“加密”过程的神秘面纱。
算法1:base64
这不是加密算法,叫做编码算法。 就像我们把文字编码成计算机的二进制数据一样。
说得更明白一点。 如果观察I am a programer这个词是英语的话,就可以通过翻译软件知道他本来的意思是“我是程序员”。
让我们看看这个字符串。 SSBsaWtlIHlvdQ==
如果你是萌新的人,你不知道那是什么意思吧。 读了这篇文章之后,我明白他的意思。 I like you
就像我们把中文翻译成英语一样,base64这样的编码算法只是把你看得懂的字翻译成肉眼看不懂的字,但如果你知道这些看不懂的符号是哪种语言,你就可以直接翻译回去。
例如,前面的SSBsaWtlIHlvdQ==是在base64中对I like you进行编码后得到的字。
“解读”也很简单。 base64在线编码,在网上搜索解码就有工具了。 如果使用代码,您将看到以下内容:
![](https://p3.toutiaoimg.com/origin/pgc-image/28abfa5b59e84ccdb40bc3bef13cffd2?from=pc)
算法2:urlencode
URL编码和base64一样,只是对算法进行编码,而不是加密。 请记住,如果观察所看到的字符串的特征,分析编码方式,编码方式就很容易解码。
因为肉眼看不到具体的意义,所以为了防止这也是君子,请考虑一下小人的所谓“加密方式”。
例如,base64的特征是末尾经常带有=符号,url代码的特征是%多。
我们经常在浏览器中看到这样的地址:
http://example.com/q=私人
后半段有很多百分号的是url编码。 同样,可以通过搜索相应的工具直接解码以获得原始数据:
http://example.com/q=私人
对应的python代码如下。
![](https://p3.toutiaoimg.com/origin/pgc-image/4905ae67d14046b2b1d5862f0868cb7d?from=pc)
算法3:md5
md5既不是编码也不是加密。 被称为摘要算法,也称为散列算法和散列算法。 他的主要职责是:
防止篡改
检查数据
例如,如果下载了该软件,您可能会担心该软件已被修改并嵌入了病毒。 软件开发者为了防止自己的软件被他人更改,会在主页上附加摘要信息。 例如,名为https://dl.snipaste.com/sha-1.txt的站点是软件各个版本的摘要信息。
在现实情况下载软件后,利用摘要算法检测工具检测软件变化,计算出他的摘要信息,如果与官方提供的一致,则软件没有变化; 如果不匹配,则表示该软件已被篡改。
摘要算法的另一个应用场景是保存密码。 我们日常注册账户输入的密码通常不会直接保存在数据库中,而是经过摘要(或加密)处理后保存在数据库中。 可以使用在线工具“加密”任意数据md5。 这里提供python版的代码:
![](https://p3.toutiaoimg.com/origin/pgc-image/4c0188c8f82045e38f5e20dab4a93788?from=pc)
注意:摘要算法是不可逆的,在BFB 3f 4712 D0 B04 E 8348 A3F B5 FA 0B9 BC 2中无法获得原始数据hello yuz。 数据库里的密码不知道你的真实密码。
为什么密码会被盗?
密码被盗通常是因为黑客利用摘要算法的另一个特性攻击了数据库。 这被称为碰撞库。
单一摘要算法的特点是,如果原始数据是固定的,则得到的散列值也相同。 例如,赫尔洛Yuz得到了bfb3f4712d0b04e8348a3fB5fa0b9BC2。
黑客利用这种对应关系,把很多人常用的密码和对应的哈希值制成关系表(彩虹表),一个一个地试。
例如很多人喜欢在8888、abc123上生成密码。 黑客只需要保存预先计算出这些密码的相应哈希值,就可以尝试突破你的账户。
什么是加盐?
上面的例子提到,黑客可以利用彩虹表套取你的密码,所以纯粹的摘要算法不是一种特别安全的方式去存储密码。但是我们可以采取“加盐” 的方式提高安全性。
网站开发者会提供一个类似于秘钥的东西,我们称为 salt, 其实就是一个随便起的字符串。然后将原始密码 + salt 得到一个新字符串,再对他进行 hash。
只要 salt 不被黑客知道,就没有办法利用彩虹表来攻击数据库。以下是加盐版的 python 代码:
![](https://p3.toutiaoimg.com/origin/pgc-image/98bdff546ee84a73aef18f236385509a?from=pc)
在测试过程中,如果公司的密码是通过摘要算法生成的,可以找开发小哥哥要盐, 然后通过对应的摘要算法验证数据库密码。
算法4:SHA1
SHA1 和 md5 一样,也是摘要算法,还有 SHA256, SHA512。 我们看到的区别就是长度不一样。长度越长,理论上更加安全,同时也意味着速度更慢。
以下是sha1 的代码,和 md5 几乎一样:
![](https://p3.toutiaoimg.com/origin/pgc-image/def6fc64ee694895a2ce5961b3e86c77?from=pc)
总结
本文我们提到的“加密” 算法,都是伪加密,只有盐(salt)和密码类似;
真正的加密算法也有很多,下节再详细补充。
base64 编码常用于在URL、COOKIE、网页中传输少量二进制数据;
优点:速度快,肉眼不可理解
缺点:编码比较长,非常容易被破解,仅适用于加密非敏感信息
url 编码常用于 URL 数据的编码和解析;
md5 是最经典,使用最广泛的摘要算法。
部分公司会采用 md5 进行密码的保存
还有公司会采用其他更适合对密码进行摘要的算法,具体找开发
sha1, sha256, sha512 比 md5 安全性更高,但是速度更慢,同时存储数据的时候耗费的资源会更多。