精华内容
下载资源
问答
  • Java MD5加密工具类

    2021-02-12 18:33:42
    分享一个MD5加密工具类,可以当作小项目的登录密码验证模块。import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java....

    分享一个MD5加密的工具类,可以当作小项目的登录密码验证模块。

    import java.io.UnsupportedEncodingException;

    import java.security.MessageDigest;

    import java.security.NoSuchAlgorithmException;

    import java.security.SecureRandom;

    import java.util.Arrays;

    /**

    * MD5加密工具类

    */

    public class MD5Util {

    private static final String HEX_NUMS_STR = "0123456789ABCDEF" ;

    private static final Integer SALT_LENGTH = 12;

    /**

    * 将 16 进制字符串转换成字节数组

    * @param hex

    * @return

    */

    private static byte[] hexStringToByte (String hex) {

    int len = (hex.length() / 2);

    byte[] result = new byte[len];

    char[] hexChars = hex.toCharArray();

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

    int pos = i * 2;

    result[i] = (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4 | HEX_NUMS_STR

    .indexOf(hexChars[pos + 1]));

    }

    return result;

    }

    /**

    * 将指定 byte 数组转换成 16 进制字符串

    * @param b

    * @return

    */

    private static String byteToHexString(byte[] b) {

    StringBuffer hexString = new StringBuffer();

    for (int i = 0; i < b.length; i++) {

    String hex = Integer.toHexString(b[i] & 0xFF);

    if (hex.length() == 1) {

    hex = '0' + hex;

    }

    hexString.append(hex.toUpperCase());

    }

    return hexString.toString();

    }

    /**

    * 获得加密后的 16 进制形式口令

    * @param password

    * @return

    * @throws NoSuchAlgorithmException

    * @throws UnsupportedEncodingException

    */

    public static String getEncryptedPwd(String password)

    throws NoSuchAlgorithmException, UnsupportedEncodingException {

    // 声明加密后的口令数组变量

    byte[] pwd = null;

    // 随机数生成器

    SecureRandom random = new SecureRandom();

    // 声明盐数组变量

    byte[] salt = new byte[SALT_LENGTH];

    // 将随机数放入盐变量中

    random.nextBytes(salt);

    // 声明消息摘要对象

    MessageDigest md = null;

    // 创建消息摘要

    md = MessageDigest.getInstance("MD5");

    // 将盐数据传入消息摘要对象

    md.update(salt);

    // 将口令的数据传给消息摘要对象

    md.update(password.getBytes("UTF-8"));

    // 获得消息摘要的字节数组

    byte[] digest = md.digest();

    // 因为要在口令的字节数组中存放盐,所以加上盐的字节长度

    pwd = new byte[digest.length + SALT_LENGTH];

    // 将盐的字节拷贝到生成的加密口令字节数组的前 12 个字节,以便在验证口令时取出盐

    System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);

    // 将消息摘要拷贝到加密口令字节数组从第 13 个字节开始的字节

    System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);

    // 将字节数组格式加密后的口令转化为 16 进制字符串格式的口令

    return byteToHexString(pwd);

    }

    /**

    * 验证口令是否合法

    * @param password

    * @param passwordInDb

    * @return

    * @throws NoSuchAlgorithmException

    * @throws UnsupportedEncodingException

    */

    public static boolean validPassword(String password, String passwordInDb){

    try {

    // 将 16 进制字符串格式口令转换成字节数组

    byte[] pwdInDb = hexStringToByte(passwordInDb);

    // 声明盐变量

    byte[] salt = new byte[SALT_LENGTH];

    // 将盐从数据库中保存的口令字节数组中提取出来

    System.arraycopy(pwdInDb, 0, salt, 0, SALT_LENGTH);

    // 创建消息摘要对象

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

    // 将盐数据传入消息摘要对象

    md.update(salt);

    // 将口令的数据传给消息摘要对象

    md.update(password.getBytes("UTF-8"));

    // 生成输入口令的消息摘要

    byte[] digest = md.digest();

    // 声明一个保存数据库中口令消息摘要的变量

    byte[] digestInDb = new byte[pwdInDb.length - SALT_LENGTH];

    // 取得数据库中口令的消息摘要

    System.arraycopy(pwdInDb, SALT_LENGTH, digestInDb, 0,digestInDb.length);

    // 比较根据输入口令生成的消息摘要和数据库中消息摘要是否相同

    if (Arrays.equals(digest, digestInDb)) {

    // 口令正确返回口令匹配消息

    return true;

    } else {

    // 口令不正确返回口令不匹配消息

    return false;

    }

    } catch (Exception e) {

    new Exception("数据库中保存的密码,没有进行MD5加密,数据非常不安全,请尽快加密!").printStackTrace();

    return false;

    }

    }

    public static void main(String[] args) throws NoSuchAlgorithmException,

    UnsupportedEncodingException {

    System.out.println(getEncryptedPwd("123456"));

    System.out.println(validPassword("123456","21166B5071425AED9C296696F55D7C86B22CAE9A9324F8F540320BBC"));

    }

    }

    展开全文
  • java md5加密可以使用第三方的DigestUtils加密工具类,也可以使用原生的md5加密方法,如果是md5第三方加密的话,需要引入maven jar包,如下。commons-codeccommons-codec${commons-codec.version}下面是写在main方法...

    java md5加密可以使用第三方的DigestUtils加密工具类,也可以使用原生的md5加密方法,如果是md5第三方加密的话,需要引入maven jar包,如下。

    commons-codec

    commons-codec

    ${commons-codec.version}

    下面是写在main方法中的示例代码,md5加密方法非常简单,如下,也需要自己稍微改一下。import java.security.MessageDigest;

    import java.security.NoSuchAlgorithmException;

    import org.apache.commons.codec.digest.DigestUtils;

    public class ArrayDemo {

    public static void main(String[] args) throws NoSuchAlgorithmException {

    String str = "hello world";

    //java原生方法

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

    byte[] arr = md.digest(str.getBytes());

    String md5Str = md5ToString(arr);

    System.out.println(md5Str);

    //第三方加密方法

    byte[] md5 = DigestUtils.md5(str);

    String md5Str2 =  md5ToString(md5);

    System.out.println(md5Str2);

    //第三方直接返回md5 16进制字符串的加密方法

    String md5Str3 = DigestUtils.md5Hex(str.getBytes());

    System.out.println(md5Str3);

    }

    //将md5数组转化为16进制字符串

    public static String md5ToString(byte[] md5){

    StringBuilder sb = new StringBuilder();

    for (int i = 0; i 

    int temp = md5[i] & 0Xff;

    String hexString = Integer.toHexString(temp);

    if (hexString.length() 

    sb.append("0").append(hexString);

    } else {

    sb.append(hexString);

    }

    }

    return sb.toString();

    }

    }

    原生的md5加密方法是java自带的,在java.security包中,而第三方加密方法在org.apache.commons.codec.digest包中,需要引入maven jar包。

    上面的代码输出字符串结果都是一样的,如下。

    5eb63bbbe01eeed093cb22bb8f5acdc3

    5eb63bbbe01eeed093cb22bb8f5acdc3

    5eb63bbbe01eeed093cb22bb8f5acdc3

    来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/java/415.html

    展开全文
  • 一点睛MD5加密算法虽然已经过时,但在一些安全性不太高的行业仍然广受欢迎,在此提供一个MD5加密工具类。二代码package com.imooc.demo.common.util;import org.apache.commons.lang3.StringUtils;import org.slf4j....

    一 点睛

    MD5加密算法虽然已经过时,但在一些安全性不太高的行业仍然广受欢迎,在此提供一个MD5加密工具类。

    二 代码

    package com.imooc.demo.common.util;

    import org.apache.commons.lang3.StringUtils;

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    import java.io.IOException;

    import java.security.MessageDigest;

    import java.security.NoSuchAlgorithmException;

    import java.util.ArrayList;

    import java.util.Collections;

    import java.util.List;

    import java.util.Map;

    /**

    * @className: Md5

    * @description: MD5加密算法

    * @date: 2020/8/20

    * @author: cakin

    */

    public class Md5 {

    private static Logger log = LoggerFactory.getLogger(Md5.class);

    private static final String SIGN_TYPE = "MD5";

    private static final String CHARSET_NAME = "UTF-8";

    private static final String salt = "3zsAa6W9gfSMMhPSlQTdWFUSHY3LS8Vb";

    /**

    * MD5加密

    *

    * @param data 加密前的数据,以数组形式存在

    * @return String 加密后的数据

    */

    public static String encrypt(byte[] data) {

    try {

    MessageDigest md5 = MessageDigest.getInstance(SIGN_TYPE);

    md5.update(data);

    return byte2hex(md5.digest());

    } catch (NoSuchAlgorithmException e) {

    log.debug("md5 加密异常", e);

    }

    return "";

    }

    /**

    * MD5加密

    *

    * @param str 加密前数据,以字符串形式存在

    * @return String 加密后数据

    */

    public static String encrypt(String str) {

    try {

    MessageDigest md5 = MessageDigest.getInstance(SIGN_TYPE);

    md5.update((str + salt).getBytes(CHARSET_NAME));

    return byte2hex(md5.digest());

    } catch (Exception e) {

    log.debug("md5 加密异常", e);

    }

    return null;

    }

    /**

    * MD5加盐加密

    *

    * @param str 加密前数据

    * @param salt 盐值

    * @return String 加密后的数据

    */

    public static String encrypt(String str, String salt) {

    try {

    MessageDigest md5 = MessageDigest.getInstance(SIGN_TYPE);

    md5.update((str + salt).getBytes(CHARSET_NAME));

    return byte2hex(md5.digest());

    } catch (Exception e) {

    if (log.isDebugEnabled()) {

    log.debug("md5 加密异常", e);

    }

    }

    return "";

    }

    /**

    * 功能描述:MD5加盐加密

    *

    * @param str 加密前数据

    * @param salt 盐值

    * @param charset 字符编码

    * @return String 加密后的字符串

    * @author cakin

    * @date 2020/8/20

    */

    public static String encrypt(String str, String salt, String charset) {

    try {

    MessageDigest md5 = MessageDigest.getInstance(SIGN_TYPE);

    md5.update((str + salt).getBytes(charset));

    return byte2hex(md5.digest());

    } catch (Exception e) {

    if (log.isDebugEnabled()) {

    log.debug("md5 加密异常", e);

    }

    }

    return "";

    }

    /**

    * 功能描述:转16进制

    *

    * @author cakin

    * @date 2020/8/20

    * @param bytes 字节数组

    * @return String 转为16进账

    */

    public static String byte2hex(byte[] bytes) {

    StringBuilder sign = new StringBuilder();

    for (int i = 0; i < bytes.length; i++) {

    String hex = Integer.toHexString(bytes[i] & 0xFF);

    if (hex.length() == 1) {

    sign.append("0");

    }

    sign.append(hex.toUpperCase());

    }

    return sign.toString();

    }

    /**

    * 功能描述:转字节数组

    *

    * @author cakin

    * @date 2020/8/20

    * @param str 16进制

    * @return byte[] 字节数组

    */

    public static byte[] hex2byte(String str) {

    if (str == null) {

    return null;

    }

    str = str.trim();

    int len = str.length();

    if (len <= 0 || len % 2 == 1) {

    return null;

    }

    byte[] b = new byte[len / 2];

    try {

    for (int i = 0; i < str.length(); i += 2) {

    b[(i / 2)] = (byte) Integer.decode("0x" + str.substring(i, i + 2)).intValue();

    }

    return b;

    } catch (Exception e) {

    }

    return null;

    }

    /**

    * 给Map请求做MD5签名

    *

    * @param sortedParams Map请求参数

    * @param secret 签名密钥

    * @return 签名

    * @throws IOException

    */

    public static String signRequestNew(Map sortedParams, String secret) throws IOException {

    // 第一步:把字典按Key的字母顺序排序

    List keys = new ArrayList(sortedParams.keySet());

    Collections.sort(keys);

    // 第二步:把所有参数名和参数值串在一起

    StringBuilder query = new StringBuilder();

    for (int i = 0; i < keys.size(); i++) {

    String key = keys.get(i);

    String value = sortedParams.get(key);

    if (!StringUtils.isEmpty(key) && !StringUtils.isEmpty(value) && !"sign".equals(key)) {

    query.append(key).append("=").append(value);

    }

    }

    log.info("获取当APP请求参数,签名前值为:" + query.toString());

    return Md5.encrypt(query.toString(), secret);

    }

    public static void main(String[] args) {

    System.out.println(encrypt("798103174@qq.com", ""));

    }

    }

    三 测试结果

    1CDC486ECB2A7A1BEF7E78254C8DA6CE

    展开全文
  • java MD5加密工具类

    2021-03-06 00:22:39
    publicclassMD5{/*下面这些S11-S44实际上是\uFFFD\uFFFD4*4的矩阵,在原始的C实现中是\uFFFD#define现的,这里把它们实现成为staticfinal是表示了只读,切能在同一个进程空间内的多\uFFFDInstance共\uFFFD*/st...

    package com.person.util;

    import java.lang.reflect.Array;

    public class MD5 {

    /*

    下面这些

    S11-S44

    实际上是

    \uFFFD

    \uFFFD4*4

    的矩阵,在原始的

    C

    实现中是

    \uFFFD#define

    现的,

    这里把它们实现成为

    static final

    是表示了只读,切能在同一个进程空间内的多

    \uFFFD

    Instance

    \uFFFD*/

    static final int S11 = 7;

    static final int S12 = 12;

    static final int S13 = 17;

    static final int S14 = 22;

    static final int S21 = 5;

    static final int S22 = 9;

    static final int S23 = 14;

    static final int S24 = 20;

    static final int S31 = 4;

    static final int S32 = 11;

    static final int S33 = 16;

    static final int S34 = 23;

    static final int S41 = 6;

    static final int S42 = 10;

    static final int S43 = 15;

    static final int S44 = 21;

    static final byte[] PADDING = {-128, 0, 0, 0, 0, 0, 0, 0, 0,

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

    /*

    面的三个成员是

    MD5

    计算过程中用到的

    3

    个核心数据,在原始的

    C

    实现

    \uFFFD

    定义到

    MD5_CTX

    结构

    \uFFFD

    */

    private long[] state = new long[4];

    // state (ABCD)

    private long[] count = new long[2];

    // number of bits, modulo 2^64 (lsb first)

    private byte[] buffer = new byte[64]; // input buffer

    /* digestHexStr MD5

    的唯

    \uFFFD \uFFFD

    个公共成员,是最新一次计算结果的

    \uFFFD 16

    ASCII

    表示

    .

    */

    展开全文
  • Java实现MD5加密工具类

    2021-03-03 10:26:48
    public final class MD5 { public static String encrypt(String strSrc) { try { char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; byte[] bytes = ...
  • 没有那么多废话,我知道这是一个简单的加密.../*** MD5不可逆加密工具类**/public class Md5Utils {/** 全局数组 **/private final static String[] strDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", ...
  • MD5加密工具类 获取MD5值,全小写方法:getMD5ofStrByLowerCase(String str) 获取MD5值,全大写方法:getMD5ofStrByUpperCase(String str) package com.md5.util; import java.security.MessageDigest; public class...
  • Java实现MD5加密的方式 MD5加密是一种常见的加密方式,经常用在保存用户密码和关键信息上。 1、什么是MD5  MD5加密全称是Message-Digest Algoorithm 5(信息-摘要算法),它对信息进行摘要采集,再通过一定的位...
  • JAVAMD5加密工具类

    2021-09-18 08:13:31
    JAVAMD5加密工具类MD5Utils public class Md5Utils { public static String md5(String str){ try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(str.getBytes("utf-8")); byte[]...
  • java中常用的工具类之String和MD5加密解密我们java程序员在开发项目的是常常会用到一些工具类。今天我分享一下我的两个工具类,大家可以在项目中使用。一、String工具类package com.itjh.javaUtil;import java.io....
  • package org.hnpmi.sanshi.baseinfo.datamonitor.entity;import java.security....public class MD5Test {public static void main(String[] args) {System.out.println(MD5("430103198112050012"));}/**...
  • MD5解密加密工具类

    2021-03-09 08:22:15
    import java.security.MessageDigest;public class MD5Util {/*** Title: MD5加密 生成32位md5码* Description: TestDemo* @author lu* @date 2016年6月23日 下午2:36:07* @param inStr* @return 返回32位m...
  • javaMD5加密工具

    2021-03-06 18:44:21
    MD5:/*** 对指定字段进行MD5加密* 参数为空或发生异常都会返回 @PASE—_FAIL (-1)* @author ZX* @date 2018年09月10日16:03:07* return String* eg:* 124756EF340DAF80196B4124686D651C* A0C83707B5438E080655DF...
  • package Utile;import java.math.BigInteger;...public class MD5_Utile {//因为工具类方法不需要实例化// 生成16位MD5密文public static String getMD5(String c_password) {try {// 生成一个MD5加密计算摘要M...
  • java md5加密 32位 小写

    2021-02-13 01:23:04
    /*** md5加密 32位 小写* @param plainText* @return*/public static String encryption(String plainText) {String re_md5 = new String();try {MessageDigest md = MessageDigest.getInstance("MD5");md.update...
  • 1.MD5工具类packagecom.ssm.util;importjava.security.MessageDigest;public classMD5Util {//将字节数组转成十六进制字符串private static String byteArrayToHexString(byteb[]) {StringBuffer resultSb= ...
  • 很多时候要对秘要进行持久化加密,此时的加密采用md5。采用对称加密的时候就采用DES方法了import java.io.IOException;import java.security.MessageDigest;import java.security.SecureRandom;import javax.crypto....
  • public staticString getMD5(String str) {MessageDigest md= null;try{md= MessageDigest.getInstance("MD5");md.update(str.getBytes());}catch(NoSuchAlgorithmException e) {log.error("", e);}return new BigIn...
  • 今天把对文本数据的加密,以及获取文件的md5值做一个封装。代码如下:package com.itydl.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOExc....
  • packagecom.sicdt.library.core....importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.security.MessageDigest;importjava.security.NoSuchAlg...
  • 本文实例为大家分享了java常用工具类的具体代码,供大家参考,具体内容如下Random随机数工具类package com.jarvis.base.util;import java.util.Random;/***** @Title: RandomHelper.java* @Package ...
  • 本文实例讲述了java实现MD5加密的方法。分享给大家供大家参考,具体如下:private String getMD5Str(String str) {MessageDigest messageDigest = null;try {messageDigest = MessageDigest.getInstance("MD5");...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,808
精华内容 12,323
关键字:

javamd5加密工具类

java 订阅