发布时间:2025-09-06 19:13:05 点击量:
HASH GAME - Online Skill Game GET 300
在各种应用开发系统中(本文主要从Java语言的角度阐述),经常会进行用户信息的存储,信息的安全保密等工作。非常直观的使用就是存储用户的密码信息,那我们如何对该信息进行存储呢?很多开发人员可能都会想到,将用户密码直接存储到Server上,显然这是不安全的。本篇文章将主要从我们在应用系统的开发过程中常用的加密算法,也是官方认可的最为安全可靠的、应用较为广泛的一种加密算法,即是从MD2、MD3和MD4发展而来的MD5算法。
MD5(MessageDigestAlgorithmMD5)消息-摘要算法,目前就是该算法的第五版。它为计算机或互联网安全领域广泛使用的一种散列函数,也是一种用于产生数字签名的单项散列算法,主要应用提供消息的完整性保护。它的作用是让大容量信息在用数字签名软件签署私人密匙前被压缩成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。在Java中,两个大int类型的数据相加,就会溢出等到一个负数或异常,因此我们可在程序设计的时候,将一些关键变量改为long类型(64bit),从个人的观点来看,这样比去重新定义一组无符号的类同时重载那些运算符,效率和代码易读性要高的多。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,这是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在RFC1321中有详细的描述。而庆幸的是在Java这样流行语言中也可对MD5算法进行实现。以下是在应用系统中开发时所用的加密算法代码类:
在软件系统的应用中,从用户密码或需要密保的数据角度考虑,用户的密码和需要密保的数据是不确定的字符串,但是经过MD5加密后,形成的密文都是32位的字符组成的字符串。此时,我们可以考虑对该32位的字符串进行处理,可把这段密文分成若干段,然后我们就可以针对每段密文进行一次MD5运算,得到的仍然是长度为32位的密文。针对密文分割方式,也有多种形式,在此只列举两种方式供参考:
MD5算法的变化方式是非常之多,在此只列举了两种形式,从上面的变化形式可再进行组合出多种形式。在软件系统的开发中,由于某些漏洞,比如SQL注入、文件系统中的数据库被下载而导致密码暴露,那么MD5变换算法就可大大的破译的难度。其实MD5算法在非开源的项目是非常有优势的,虽然在开源的项目中的优势会受到削弱,但还是有力的抑制原文/密文对照数据库的作用。而进行复杂的转换后,可有效的提高安全性。当然这也会增大系统的开销,但对安全性要求较高的系统来说,也是非常值得的。