单元 1.3.1 压缩、加密和哈希
有损压缩通过移除某些数据来减小文件大小。原始文件无法从压缩版本中恢复,因为已删除的数据丢失了。它通常用于声音和视频文件,因为更改不一定能被注意到。例如,在声音文件中,压缩器可以剪掉高不可听频率,或者视频/图像文件可以降低分辨率或减少其颜色范围。
无损压缩缩短文件中的冗余、重复数据,以减小其大小。原始文件得以保留,并且始终可以完全恢复。
解释有损压缩和无损压缩如何在点对点网络中的数据传输中使用。[5]
答案
允许对有损压缩(3)和无损压缩(2)进行任何有效的解释,并提供它们在点对点网络中用于减小文件大小和数据传输时间的示例。允许每个包含有效示例的要点加 1 分。(2)
主要有两种方法
最著名的字典编码器是 Lempel-Ziv-Welch(LZW)编码器。它通过检查文件并创建一个字典来工作,例如
"汤姆·琼斯在丛林中幸存了下来。汤姆在丛林中。"
句子中的每个单词都可以分配一个数字
单词 | ID 号码 |
---|---|
汤姆 | 1 |
琼斯 | 2 |
幸存 | 3 |
那 | 4 |
丛林 | 5 |
是 | 6 |
在 | 7 |
这个长句子可以转换为:"1234516745" 其中每个数字对应句子中的一个单词。
这种编码形式将相同数据片段的大型运行替换为单个数据值/数量。例如,如果图像中有一行 100 个红色像素,这可以编码为 R100。该技术在 TIFF 和 BMP 文件中被发现,并且如果数据以长序列形式存在,则效果最佳。
在尝试减小文件大小方面,无损压缩通常不如有损压缩有效。对于文本文件或可执行程序等文件,无损压缩是唯一的选择,因为任何数据丢失都会破坏其功能。
加密是指以一种只有预期接收者才能解密的方式对数据进行加密的过程。主要有两种类型:对称和非对称。
在对称加密中,用于加密消息的密钥与用于解密它的密钥相同。这要求发送方和接收方都安全地存储密钥。它的编码和解码速度非常快,但是由于密钥共享,因此更容易破解。
这种方法使用两个单独的密钥 - 一个密钥加密消息,另一个密钥解密消息。一个公钥为双方都知道,但在实现加密算法时,还会使用第二个兼容的私钥。要解密消息,需要再次应用公钥和私钥,从而揭示消息。这种方法要安全得多,但需要更多的处理能力。使用的密钥通常是极大的随机数,不可能被猜到。
非对称加密利用了一些数学运算相对容易执行,但很难撤消的原理。例如,求指数模和将两个素数相乘。
这些算法有两个用途 - 它们可以提供一种快速的方法来 生成内存地址 以便在数据库中存储记录,以及用于存储和检查密码。它们通常用于网络和在线交易。哈希算法是单向函数,因此将纯文本值转换为哈希非常容易,但将哈希转换回纯文本非常困难。这使得它适用于存储密码,但不适用于加密数据。
用户输入密码后,密码会被哈希并存储在服务器上。在此之后,每次用户尝试登录时,哈希算法都会应用于输入的密码,并将结果与存储的哈希值进行比较。如果哈希值相同,则输入了正确的密码,否则登录会被拒绝。哈希值不能轻松转换回其原始密码,但黑客可以采用暴力破解技术来尝试猜测原始密码。
// e.g. User A enters: password123
sha256($password); // SHA-256 is a one-way hashing function
// ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f
为了进一步保护密码,可以在哈希过程中添加盐值。盐值是在密码首次存储时附加到密码的随机字符串。该字符串随后被存储起来,以便用户再次输入密码时,可以将相同的盐值附加到密码上,并以类似于上述的方式执行检查。这样做的好处是,许多人使用诸如“password”之类的常用密码,而通过添加盐值,这些密码不会都生成相同的哈希值。如果有人获得您的哈希值,看到许多哈希值相同,就会将他们必须尝试的密码范围缩小到这些用户的常用密码,从而使他们能够通过暴力破解方式绕过密码。
// e.g. User B enters: password123
// Random salt: wuphAT=5renE
sha256(sha256($password).$salt);
// a3a0f0c8ce9208fa3d122778b437e0287c70fd829ad07f6672143d114cb244c2