`

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 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 messageDigest=MessageDigest.getInstance("SHA-1"); //开始使用算法  messageDigest.update(plainText);  //输出算法运算结果  System.out.println(new String(messageDigest.digest(),"UTF8")...

    使用JAVA代码实现MD5加密

    import java.security.MessageDigest; import sun.misc.BASE64Encoder; /** * * @author * 版本号:CATTSOFT 1.2.0 * 日期:2009年3月8日 * 功能:对一个字符串进行md5加密 */ public class EncryptUtil { ...

    Java计算文件MD5值(支持大文件)

    MessageDigest MD5 = MessageDigest.getInstance("MD5"); fileInputStream = new FileInputStream(file); byte[] buffer = new byte[8192]; int length; while ((length = fileInputStream.read(buffer...

    Java实现的Base64、MD5、3DES三种工具

    在Java中,MD5加密工具可以使用java.security.MessageDigest类来实现。MessageDigest类提供了一个update()方法来更新要加密的数据,并提供了一个digest()方法来获取加密后的散列值。 在本文档的示例代码中,我们...

    微信小程序配置服务器提示验证token失败的解决方法

    最近在学习微信小程序,遇到的第一个问题就是需要配置服务器 关于这个服务器的配置我也是绕了好多弯路,说白了...import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java

    Android md5加密与php md5加密一致详解

    在Android开发过程中加密密码常常采用md5加密方式,然而如果... import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { //密码加密 与php加密一致 public s

    MD5加密 用于数据 密码加密

    MD5的方式加密数据 通过导入一个 import java.security.MessageDigest;的包来实现 MessageDigest mdInst = MessageDigest.getInstance("MD5"); 使用这个方法

    Android编程之MD5加密算法实例分析

    Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包。实际上与J2SE平台一模一样。 算法签名: 代码如下:String getMD5(String val) throws NoSuchAlgorithmException ...

    Java 中文件MD5和SHA1的比较

    Java 中文件的MD5和SHA-1的研究 Java中提供了一个类java.security.MessageDigest类是一种提供密码安全消息摘要如SHA-1和MD5功能的引擎类。不需要额外使用第三方组件,且支持超大文件。

    跑腿源码java-cryptographic-hashing:密码散列

    java.security.MessageDigest; MessageDigest 类为应用程序提供了消息处理计算的有用性,例如 SHA-1 或 SHA-256。 消息摘要是安全的单向散列容量,它采用任意大小的信息并产生固定长度的散列值。 导入 java.math....

    Java MD5加密

    import java.security.MessageDigest; public class MD5Util { private static final String ALGORITHM = MD5; private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', ...

    分享JavaScript与Java中MD5使用两个例子

    在网上查了一下,在网上收集了Java...import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Utils { public static void main(String[] args){ System.out.println

    达内客户端+聊天室源码

    import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Vector; import org....

    java加密枝术.doc

    java.security包中的MessageDigest类提供了计算消息摘要的方法, 首先生成对象,执行其update( )方法可以将原始数据传递给该对象,然后执行其digest( )方法即可得到消息摘要。

    android md5加密与rsa加解密实现代码

    代码如下: import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;... try { messageDigest = MessageDigest.getInstance(“MD5

    SHA-256 java加密代码

    ava.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。关于信息摘要...

    Java中常用的加密算法MD5,SHA,RSA

    MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(obj); return md5.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } ``` 二、SHA 加密算法 ...

    android中Sha256加密算法

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Sha256 { public static String getSHA256(String str){ MessageDigest messageDigest; String encodestr = ...

Global site tag (gtag.js) - Google Analytics