Md5 加密

所谓MD5,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的。

 

MD5还被用于加密解密技术上,如Unix、各类BSD系统登录密码(在MD5诞生前采用的是DES加密算法,后因MD5安全性更高,DES被淘汰)、通信信息加密(如大家熟悉的即时通信软件MyIM)、数字签名等诸多方面。

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

Md5 加密类

public class MD5Builder {

    static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',

            '9', 'a', 'b', 'c', 'd', 'e', 'f' }; 

    public static String getMD5(File file) {

        FileInputStream fis = null;

        try {

            MessageDigest md = MessageDigest.getInstance("MD5");

          //  logger.info("MD5摘要长度" + md.getDigestLength());

            fis = new FileInputStream(file);

            byte[] buffer = new byte[2048];

            int length = -1;

            long s = System.currentTimeMillis();

            while ((length = fis.read(buffer)) != -1) {

                md.update(buffer, 0, length);

            }

             byte[] b = md.digest();

            return byteToHexString(b);


        } catch (Exception ex) {

            ex.printStackTrace();

            return null;

        }finally {

            try {

                fis.close();

            } catch (IOException ex) {

                ex.printStackTrace();

            }

        }

    }

 

   /** *//**

     * 一般的用法: 在注册时 调用 getMD5()  代码:MD5Builder.getMD5( password)

     * 

     * 登录时  MD5Builder.getMD5( password) 与数据库中的相比较

     */

    public static String getMD5(String message){

        try {
     // 生成一个MD5加密计算摘要 
            MessageDigest md = MessageDigest.getInstance("MD5");

// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符  
            byte[] b = md.digest(message.getBytes("utf-8"));

            return byteToHexString(b);

        } catch (Exception e) {

           // logger.error(e);

            e.printStackTrace();

            return null;

        }

    }

    

  

    private static String byteToHexString(byte[] tmp) {

        String s;

        char str[] = new char[16 * 2];        

        int k = 0; 

        for (int i = 0; i < 16; i++) { 

            byte byte0 = tmp[i]; 

            str[k++] = hexDigits[byte0 >>> 4 & 0xf]; 

            str[k++] = hexDigits[byte0 & 0xf]; 

        }

        s = new String(str); 

        return s;

    }

}

 

你可能感兴趣的:(算法,unix,F#)