不仅仅是加密算法整理

MD5

MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

BASH
1MD5(tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461
点击展开查看更多

这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。

大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件名做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。

我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt 文件中,并对这个 readme.txt 产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

MD5 还广泛用于操作系统的登陆认证上,如 Unix、各类 BSD 系统登录密码、数字签名等诸多方。如在 UNIX 系统中用户的密码是以 MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行 MD5 Hash 运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5 将任意长度的“字节串”映射为一个 128bit 的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的 md5() 函数重新设一个密码,如 admin,把生成的一串密码的Hash值覆盖原来的Hash值就行了。

正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码 MD5 值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。

UUID

UUID(Universally Unique Identifier)是一种全球唯一标识符,它是一种 128 位的二进制数,通常用 16 进制字符串表示。UUID 的主要目的是为每个对象分配一个唯一的标识符,以便在不同系统和不同时间间隔内识别对象。

UUID 的总长度为 128 位,相当于 16 个字节。UUID 由 32 个十六进制字符组成,通常用 5 个部分表示:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,加上中间的 - 一共 36 位。

UUID的分类:

版本1(基于时间戳):基于时间戳和MAC地址生成的UUID 版本2(基于DCE安全):基于DCE(Distributed Computing Environment)安全标准生成的UUID 版本3(基于MD5哈希):基于MD5哈希算法生成的UUID 版本4(随机生成):完全随机生成的UUID 版本5(基于SHA-1哈希):基于SHA-1哈希算法生成的UUID

UUID的特点:

唯一性:UUID的设计目标是确保每个UUID都是唯一的 不可预测性:UUID的生成算法设计为不可预测,这意味着攻击者无法预测下一个UUID的值 高性能:UUID的生成速度非常快,适合高性能应用

UUID的应用场景:

数据库主键:UUID可以作为数据库主键,确保每条记录的唯一性 用户标识:UUID可以作为用户标识,确保每个用户的唯一性 设备标识:UUID可以作为设备标识,确保每个设备的唯一性 事务标识:UUID可以作为事务标识,确保每个事务的唯一性

后续补充…

版权声明

作者: 浮生一梦

链接: /posts/2024/09/encryption-algorithm/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

评论

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键