MD5加密解密以及设置salt(盐值)

摘要:
MD5算法包com.oracle.jsp.util;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;/***@Authorjxing**/publicclassMD5{//全局数组privatefinalstaticString[]strDigits={“0”,“1”,“2

MD5算法

package com.oracle.jsp.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
 * 
 * @author wjxing
 *
 */
public class MD5 {
    
    // 全局数组
    private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

    public MD5() {
    }

    // 返回形式为数字跟字符串
    private static String byteToArrayString(byte bByte) {
        int iRet = bByte;
        // System.out.println("iRet="+iRet);
        if (iRet < 0) {
            iRet += 256;
        }
        int iD1 = iRet / 16;
        int iD2 = iRet % 16;
        return strDigits[iD1] + strDigits[iD2];
    }

    // 返回形式只为数字
    @SuppressWarnings("unused")
    private static String byteToNum(byte bByte) {
        int iRet = bByte;
        System.out.println("iRet1=" + iRet);
        if (iRet < 0) {
            iRet += 256;
        }
        return String.valueOf(iRet);
    }

    // 转换字节数组为16进制字串
    private static String byteToString(byte[] bByte) {
        StringBuffer sBuffer = new StringBuffer();
        for (int i = 0; i < bByte.length; i++) {
            sBuffer.append(byteToArrayString(bByte[i]));
        }
        return sBuffer.toString();
    }

    public static String GetMD5Code(String strObj) {
        String resultString = null;
        try {
            resultString = new String(strObj);
            MessageDigest md = MessageDigest.getInstance("MD5");
            // md.digest() 该函数返回值为存放哈希值结果的byte数组
            resultString = byteToString(md.digest(strObj.getBytes()));
        } catch (NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        }
        return resultString;
    }

}

设置盐值(salt)的算法

package com.oracle.jsp.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class StringUtil {

    /**
     * String转Int
     * @param str
     * @return
     */
    public static int StringToInt(String str) {
        int result = 0;
        try {
            result = Integer.parseInt(str);
        } catch (NumberFormatException e) {
            result = 0;
            //e.printStackTrace();
        }
        return result;
    }
    /**
     * 获取盐值(随机字符串)
     * @param length
     * @return
     */
    public static String getRandomString(int length) { 
        String base = "abcdefghijklmnopqrstuvwxyz0123456789";   
        Random random = new Random();   
        StringBuffer sb = new StringBuffer();   
        for (int i = 0; i < length; i++) {   
            int number = random.nextInt(base.length());   
            sb.append(base.charAt(number));   
        }   
        return sb.toString();   
     }
    
    public static List<String> splitProperties (String properties){
        List<String> options = new ArrayList<String>();
        String option = null;
        String[] strings = properties.split(",");
        for (String string : strings) {
            if(!"0".equals(string)){
                option = string.charAt(3)+"";
                options.add(option);
                
            }
        }
        return options;
        
    }
    /**
     * String转float
     * @param str
     * @return
     */
    public static float strToFlo(String str) {
        float i = 0;
        try {
            i = Integer.parseInt(str);
        } catch (Exception e) {
        }
        return i;
    }
}

具体的使用方法

加密
String salt = StringUtil.getRandomString(10);//获取指定长度的盐值
String md5Pwd = 5.GetMD5Code(MD5.GetMD5Code(password)+salt);//调用加密方法对输入的密码以及盐值进行加密,随后需要将密文以及盐值存入到数据库中

解密

rs.getString("password").equals(MD5.GetMD5Code(password+rs.getString("salt")))   //对登录时输入的密码再加上数据库中对应的salt重新进行加密,判断加密后的密文与数据库中存储的是否相同

免责声明:文章转载自《MD5加密解密以及设置salt(盐值)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇osg模型操作之位置变换节点(直接设置想要的效果)代码重构封装参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

rabbitMQ第二篇:java简单的实现RabbitMQ

前言:在这里我将用java来简单的实现rabbitMQ。下面我们带着下面问题来一步步的了解和学习rabbitMQ。 1:如果消费者连接中断,这期间我们应该怎么办 2:如何做到负载均衡 3:如何有效的将数据发送到相关的接收者?就是怎么样过滤 4:如何保证消费者收到完整正确的数据 5:如何让优先级高的接收者先收到数据 一:"Hello RabbitMQ" 下面...

钉钉机器人

普通发送消息 Map<String, Object> params = new HashMap<>(3); params.put("msgtype", "text"); Map<String, Object> text = new HashMap<>(1);...

RabbitMQ 消息应答机制

一、概述 消费者处理一个任务是需要一段时间的,如果有一个消费者正在处理一个比较耗时的任务并且只处理了一部分,突然这个时候消费者宕机了,那么会出现什么情况呢? 要回答这个问题,我们先了解一下 RabbitMQ 的消息应答机制 为了保证消息从队列可靠地达到消费者并且被消费者消费处理,RabbitMQ 提供了消息应答机制,RabbitMQ 有两种应答机制,自动应...

JAVA获取文件本身所在的磁盘位置

我们在做java开发(纯java程序,或者java web开发)时,经常会遇到需要读取配置文件的需求,如果我们将文件所在位置的信息直接写到程序中,例如:E:\workspace\JavaGUI\bin\com\util这个目录,这样虽然可行,但是,却产生了很大的局限性,因为读取的文件必须要要满足在E:\workspace\JavaGUI\bin\com\u...

kafka producer interceptor拦截器(五)

  producer在发送数据时,会经过拦截器和序列化,最后到达相应的分区。在经过拦截器时,我们可以对发送的数据做进步的处理。   要正确的使用拦截器需要以下步骤:     1.实现拦截器ProducerInterceptor的方法     2.在producer的prop中配置        prop.put("interceptor.classes",...

异常:org.json.JSONException: End of input at character 0 of

在使用Gson时遇到org.json.JSONException: End of input at character 0 of 异常。 public static void jsonArrayRequest(final MainActivity mainActivity, RequestQueue rq, String uri,...