`

java.security.MessageDigest

阅读更多
java.security.MessageDigest简介:

常用场景:
    一般我们数据库登录时,需要对用户的密码进行加密操作,不直接将原密码保存到数据库中,用户登录时候也是采用加密算法进行比较

本案只介绍使用java.security.MessageDigest,对数据进行加密操作。该方法是单向的加密算法

详细代码如下所表示:

//基本的公用类
package com.xue.security;

import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SecurityTest
{
    // MD5是16位,SHA是20位(这是两种报文摘要的算法) 定义两种加密算法的类
    private static final String MD5_ALGORITHM = "MD5";
    
    private static final String SHA_1_ALGORITHM = "SHA-1";
    
    /** 十六进制 */
    private static final int HEX_NUM = 16;
    
    /** 十六进制码 */
    private static final String[] HEX_DIGITS = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
        "e", "f"};



}

//对数据进行加密的方法:

 /**对语句进行单向加密
     * <功能详细描述>
     * @param message   需要加密的信息
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException [参数说明]
     * 
     * @return byte[] [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public byte[] encrypt(String message)
        throws NoSuchAlgorithmException, IOException
    {
        
        // 加密
        MessageDigest encrypt = MessageDigest.getInstance(SecurityTest.MD5_ALGORITHM);
        
        // 添加需要加密的信息
        encrypt.update(message.getBytes());
        
        // 对信息信息加密
        byte[] encryptMD5 = encrypt.digest();
        
        //获得加密算法
        System.out.println(encrypt.getAlgorithm());
        
        //得到加密算法的长度
        System.out.println(encrypt.getDigestLength());
        
        return encryptMD5;
       
    }

//对数据进行base64转发,有可能某些byte是不可打印的字符。
存在几种处理方式,
方式一:转化为base64
  /** 将数据转化为BASE64码进行保存
     * <功能详细描述>
     * @param encryptMD5
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public String transform(byte[] encryptMD5)
    {
        //对数据进行base64转发,有可能某些byte是不可打印的字符。 
        BASE64Encoder basEncoder = new BASE64Encoder(); 
        return basEncoder.encode(encryptMD5);
    }

//将byte转化为16进制
有两种方式转化为16进制
第一种:
 /**
     * 转化方式二
     * 2进制转16进制方式二 <功能详细描述>
     * 
     * @param b
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static String byte2hex(byte[] b)
    {
        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n++)
        {
            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
            
            if (stmp.length() == 1)
            {
                hs = hs + "0" + stmp;
            }
            else
            {
                hs = hs + stmp;
            }
        }
        
        return hs.toUpperCase();
        
    }

第二种:
/**
     * 转化方式二
     * 将数据转化为16进制进行保存,因为有些byte是不能打印的字符 字节数组的转化
     * 
     * @param b 字节数组
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static String byteArrayToHexString(byte[] b)
    {
        StringBuffer result = new StringBuffer(128);
        for (int i = 0; i < b.length; i++)
        {
            result.append(byteToHexString(b[i]));
        }
        return result.toString();
    }
    
    /**
     * 转化方式二
     * 将数据转化为16进制进行保存,因为有些byte是不能打印的字符 单字节转化
     * 
     * @param b
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static String byteToHexString(byte b)
    {
        int n = b;
        if (0 > n)
        {
            n = 256 + n;
        }
        int d1 = n / HEX_NUM;
        int d2 = n % HEX_NUM;
        return HEX_DIGITS[d1] + HEX_DIGITS[d2];
    }

最后将Byte数组转化为String保存到DB中


比较两个加密byte数组是否相同
  /** 将数据转化为BASE64码进行保存
     * <功能详细描述>
     * @param encryptMD5
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public String transform(byte[] encryptMD5)
    {
        //对数据进行base64转发,有可能某些byte是不可打印的字符。 
        BASE64Encoder basEncoder = new BASE64Encoder(); 
        return basEncoder.encode(encryptMD5);
    }



测试函数
 public static void main(String[] args)
        throws NoSuchAlgorithmException, IOException
    {
        SecurityTest t = new SecurityTest();
        //得到加密数组
        byte[] data = t.encrypt("我的测试信息!");
        //转化为字符串,采用base编码方式
        String baseResult = SecurityTest.transform(data);
        
        String hexResult = SecurityTest.byte2hex(data);
        
        System.out.println("baseResult"+baseResult);
        System.out.println("hexResult"+hexResult);
        
    }


结果:
baseResult:+HwBij+rZkL3Ihsxx2xFsA==
hexResult:F87C018A3FAB6642F7221B31C76C45B0
分享到:
评论

相关推荐

    Java 2平台安全技术-结构,API设计和实现

    7.3.3 java.security.MessageDigest 122 7.3.4 java.security.Signature 123 7.3.5 算法参数 124 7.3.6 java.security.Key和java.security. spec.KeySpec 126 7.3.7 java.security.KeyFactory和java. security....

    java_security

    Java中,可以使用`java.security.MessageDigest`类的`getInstance`方法获取MD5实例,然后对数据进行处理,得到散列值。 SHA(Secure Hash Algorithm)系列,包括SHA-1和SHA-256等,同样是单向散列函数,提供更强的...

    MD5_java.rar_MD5 JAVA_java md5_md5_md5算法

    在这个例子中,`getMD5`方法接收一个字符串,使用`MessageDigest.getInstance("MD5")`创建一个MD5实例,然后对输入字符串的字节进行哈希处理。得到的结果是一个字节数组,接着通过`String.format("%02x", 0xFF & b)`...

    java密码加密

    MessageDigest md = MessageDigest.getInstance("MD5"); md.update(info.getBytes()); byte[] digestBytes = md.digest(); return bytesToHex(digestBytes); } catch (NoSuchAlgorithmException e) { e....

    JAVA 2平台安全技术-结构,API设计和实现

    7.3.3 java.security.MessageDigest 122 7.3.4 java.security.Signature 123 7.3.5 算法参数 124 7.3.6 java.security.Key和java.security. spec.KeySpec 126 7.3.7 java.security.KeyFactory和java. security....

    各种java加密算法工具类

    MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(input.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b &...

    SHA-1-Java.rar_SHA1_java 算法_java文件指纹

    MessageDigest digest = MessageDigest.getInstance("SHA-1"); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[1024]; int read; while ((read = fis.read(buffer)) != -1) { ...

    MD5和RSA加密算法Java完成实现

    MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(input.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : messageDigest) { hexString....

    Java加密技术详解(参考文档)

    public class HashUtil { public static String sha256(String data) throws NoSuchAlgorithmException { MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] hashBytes = messageDigest

    MD5加密java和android通用

    MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(input.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b &...

    单向加密算法的Java实现

    MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(data); return md5.digest(); } } ``` **SHA加密** SHA家族包括SHA-1、SHA-256等,它们提供了更强的安全性。与MD5类似,可以使用`...

    JavaSecuritySolutions

    7. **数据完整性(Data Integrity)**:`java.security.MessageDigest`类用于计算哈希值,确保数据未被篡改。MD5和SHA家族的算法常用于此目的。 8. **网络安全(Network Security)**:Java的`java.net`包支持SSL/...

    java-util大全.rar

    Java的`java.security.MessageDigest`类可以生成MD5摘要,常用于数据校验和密码存储。 8. **FastDfs文件服务器**: FastDFS是一个开源的高性能、轻量级的分布式文件系统,Java客户端可以用来上传、下载文件,处理...

    java数据加密.pdf

    MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); // 输出摘要信息 System.out.println(new String(messageDigest.digest(), "UTF8")); } } ``` 除了消息摘要,私钥加密也是密码学中的重要...

    java进行加密

    MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(input.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte aMessageDigest : messageDigest) { ...

    加密解密-Java加密和数字签名.doc

    MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); // 更新消息 messageDigest.update("明文消息".getBytes("UTF8")); // 输出摘要 byte[] digest = messageDigest.digest(); // 可以将摘要...

    Java加密组件实现DES、RSA和SHA加密算法

    MessageDigest digest = MessageDigest.getInstance("SHA-256"); return digest.digest(input.getBytes()); } } ``` 在实际项目中,`encryptModule`可能包含了上述类的实现,以及相关的测试代码和配置文件。这些...

    md5_new.rar_MD5 JAVA_java md5_md5_加密算法

    2. **创建MessageDigest实例**:通过调用`MessageDigest.getInstance("MD5")`获取一个MD5实例。这一步是关键,因为MD5是MessageDigest的一个具体实现。 ```java MessageDigest md = MessageDigest.getInstance("MD5...

    SHA-256(JAVA)

    MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hashBytes = digest.digest(input.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : hashBytes) { hex...

Global site tag (gtag.js) - Google Analytics