MD5算法加密

MD5算法普遍用于数字签名技术

数字签名技术:可以检测文件或其他应用的完整性,判断有无修改;


简单应用如下:
假设通信的两端,一端为文件的发送者,而另一端为文件的接受者。
发送端:发送者对所发送的文件调用相关的函数来生成该文件的摘要信息,然后将该摘要信息用其本人的私钥进行加密处理,将摘要信息的密码模式与该文件一起发送给接受者;
接受端:这时接受者共得到两样东西,一个是所需要的文件,另一个是已加密摘要信息,接受端处理如下,
首先使用发送者提供的公钥对已加密的摘要信息进行解密处理,还原摘要信息的明码格式;
然后对接受到的文件像发送端那样进行函数处理,将得到的摘要信息与解密出来的摘要信息进行比对。
如果比对结果相同,则说明接受的文件是完整的;如果不同,说明文件在传输的过程中可能被修改过或已感染病毒。
由上可以看出:数字签名实际上是一个加密的过程;而数字签名的验证实际上是一个解密的过程

 

数字签名技术普遍应用于软件下载站,论坛数据库,系统文件安全等方面,如:当我们下载某一软件时,经常会在该软件的描述信息中找到其MD5值来用于下载后的校验过程,从而有效防止病毒。

import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
  
public class MD5Util {  
  
    public String getMD5(byte[] source){  
        String s=null;  
        //用来将字节转换成16进制表示的字符  
        char[] hexDigits={'0','1','2','3','4','5','6','7','8','9',  
                'a','b','c','d','e','f'};  
        try {  
            MessageDigest md=MessageDigest.getInstance("MD5");  
            md.update(source);  
            //MD5的计算结果是一个128位的长整数,用字节表示为16个字节  
            byte[] tmp=md.digest();  
            //每个字节用16进制表示的话,使用2个字符(高4位一个,低4位一个),所以表示成16进制需要32个字符  
            char[] str=new char[16*2];  
            int k=0;//转换结果中对应的字符位置  
            for(int i=0;i<16;i++){//对MD5的每一个字节转换成16进制字符  
                byte byte0=tmp[i];  
                str[k++]=hexDigits[byte0>>>4 & 0xf];//对字节高4位进行16进制转换  
                str[k++]=hexDigits[byte0 & 0xf];    //对字节低4位进行16进制转换  
            }  
            s=new String(str);  
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
        return s;  
    }  
    public static void main(String[] args) {  
        MD5Util md5Util=new MD5Util();  
        String result=md5Util.getMD5("abc".getBytes());  
        System.out.println(result);  
    }  
  
}  

 

MD5还普遍应用于操作系统或一般系统的登录认证上,如当我们开发使用人员管理系统时,发现数据库表中所存储的用户密码并不是用户所输入的原生态的密码格式,而是经过MD5处理后的一段字符串。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,在和数据库表中的md5值进行比较来确定输入密码是否正确。这样便避免了普通用户的密码被具有系统管理员权限的用户查到,即使查数据库,得到的也只是MD5处理后的信息,而摘要信息向源信息的转变是一个不可逆的过程

工作应用:
前段时间一直在做银行全国影像的项目,在央行与商业银行影像交互的过程中,涉及到报文的编签、核签过程,其实也是数字签名的使用过程,以此来确保报文信息的完整性。

实用类:获取某一字节流的摘要信息

猜你喜欢

转载自blog.csdn.net/qq_40754259/article/details/80521810