精华内容
下载资源
问答
  • 今天做项目的时候发现javamd5算法返回的是16个字节长的byte,但是rails加密后是32位长的字符串,于是需要在客户端这16字节的byte转换为32个字符的字符串,找到了一个算法如下: [code="java"] //...
    今天做项目的时候发现java里md5算法返回的是16个字节长的byte,但是rails加密后是32位长的字符串,于是需要在客户端将这16字节的byte转换为32个字符的字符串,找到了一个算法如下:
    

    //测试
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update("samyou".getBytes());
    byte b[] = md.digest();
    System.out.println(bytesToHexString(b));

    以下是算法:

    public static final String bytesToHexString(byte[] bArray)
    {
    StringBuffer sb = new StringBuffer(bArray.length);
    String sTemp;
    for (int i = 0; i < bArray.length; i++) {
    sTemp = Integer.toHexString(0xFF & bArray[i]);
    if (sTemp.length() < 2)
    sb.append(0);
    sb.append(sTemp.toLowerCase());
    }
    return sb.toString();
    }
    展开全文
  • java获取文件MD5,获取字符串MD5

    千次阅读 2018-09-23 19:29:40
    获取md5值4个步骤: 1.创建MessageDigest对象md5。 2.使用md的update(byte[] buffer)...4.该摘要数组转换为32位的md5值. 注意:如果要获得16位的md5值就是取32位的md5值的中间16位。可以使用subString(8,24)截...

     获取md5值4个步骤:

    1.创建MessageDigest对象md5。

    2.使用md的update(byte[] buffer)方法将数据更新到md5对象中。

    3.使用md5的digest()方法获得摘要,该摘要是一个长度为16的数组。

    4.将该摘要数组转换为32位的md5值.

    注意:如果要获得16位的md5值就是取32位的md5值的中间16位。可以使用subString(8,24)截取。

     

     

    以下是获得文件和字符串md5的方法,去除main方法即可作为一个工具类。

    package com.wenba1314.tools;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class MD5Tool {
        private static MessageDigest md;
        static {
            try {
                //初始化摘要对象
                md = MessageDigest.getInstance("md5");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
        public static void main(String[] args) throws IOException {
            System.out.println(generateMD5ForString("test"));
            System.out.println(generateMD5ForFile(new File("1.jpg")));
    
        }
        //获得字符串的md5值
        public static String generateMD5ForString(String str){
            //更新摘要数据
            md.update(str.getBytes());
            //生成摘要数组
            byte[] digest = md.digest();
            //清空摘要数据,以便下次使用
            md.reset();
            return formatByteArrayTOString(digest);
        }
        //获得文件的md5值
        public static String generateMD5ForFile(File file) throws IOException {
            //创建文件输入流
            FileInputStream fis = new FileInputStream(file);
            //将文件中的数据写入md对象
            byte[] buffer = new byte[1024];
            int len=-1;
            while ((len = fis.read(buffer)) != -1) {
                md.update(buffer, 0, len);
            }
            fis.close();
            //生成摘要数组
            byte[] digest = md.digest();
            //清空摘要数据,以便下次使用
            md.reset();
            return formatByteArrayTOString(digest);
        }
        //将摘要字节数组转换为md5值
        public static String formatByteArrayTOString(byte[] digest) {
            //创建sb用于保存md5值
            StringBuffer sb = new StringBuffer();
            int temp;
            for (int i=0;i<digest.length;i++) {
                //将数据转化为0到255之间的数据
                temp=digest[i]&0xff;
                if (temp < 16) {
                    sb.append(0);
                }
                //Integer.toHexString(temp)将10进制数字转换为16进制
                sb.append(Integer.toHexString(temp));
            }
            return sb.toString();
        }
    }
    

     

    展开全文
  • MD5加密算法不需要自己去实现,java提供了java.security.MessageDigest类。 关于MessageDigest类 --待补充 官方文档地址:https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html ...

    MD5加密算法不需要自己去实现,java提供了java.security.MessageDigest类。

    关于MessageDigest类  --待补充

    官方文档地址:https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html

    MessageDigest类主要提供信息摘要算法功能,如常见的MD5、SHA-1和SHA-256等,信息摘要单向的散列函数,只能够进行加密,不能解密,因此在使用的时候一般是直接将目标对象采用md5加密后直接与数据库对比。

    1.创建MessageDigest实例

    修饰符和类型方法名称和描述
    static MessageDigest

    getInstance(String algorithm)

    返回指定摘要算法的MessageDigest对象

    algorithm表示的是摘要算法名称,主要有MD2、MD5、SHA-1 、SHA-224 、SHA-256 、SHA-384 、SHA-512

    //创建MD5摘要算法
    MessageDigest md5 = MessageDigest.getInstance("MD5");

    实现过程

    主要分三个部分:

    1.将字符串转换为字节流,

    2.调用digest()方法对指定字节流进行加密

    3.将加密后的字节流转换为16进制格式的字符串,(可根据自己需要选择转换成对应格式字符串)

    代码如下:

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class EncodeUtil {
    	/**
    	 * 将字符串以md5加密
    	 * @param str
    	 * @return 32位字符串
    	 */
    	public static String encodeByMD5(String str) {
    		byte[] bytes = null;
    		try {
    			MessageDigest md5 = MessageDigest.getInstance("MD5");
    //			System.out.println(md5.getDigestLength());   //16
    			bytes =  md5.digest(str.getBytes("utf-8"));
    		} catch (NoSuchAlgorithmException e) {
    			// TODO 自动生成的 catch 块
    			e.printStackTrace();
    			LogHelper.logError(e); //log4j日志输出,可注释
    		} catch (UnsupportedEncodingException e) {
    			// TODO 自动生成的 catch 块
    			e.printStackTrace();
    		}
    		return bytesTo16BString(bytes);
    	}
    	
    	private static String bytesTo16BString(byte[] bytes) {
    		StringBuffer res = new StringBuffer();
    		int num = 0;
    		for(int i=0;i<bytes.length;i++) {
    			num = bytes[i]>0?bytes[i]:255+bytes[i];
    			String hex = Integer.toHexString(num);
    			res.append(hex.length()<2?0+hex:hex);
    		}
    		return res.toString();
    	}
    }

     

    展开全文
  • Java将字节数组转换成字符串

    千次阅读 2016-10-27 10:12:56
    项目要求把通过TCP传过来的原始报文做保存,所以要先把字节数组转换成16进制的字符串保存下来。字符串保存时必须做相应处理。比如第二个字节转十进制是1 第二个字节转十进制是2 第三个字节转十进制是13 如果不...

    reference:http://blog.csdn.net/lmj623565791/article/details/23609929


    项目要求把通过TCP传过来的原始报文做保存,所以要先把字节数组转换成16进制的字符串保存下来。字符串保存时必须做相应处理。比如第二个字节转成十进制是1 第二个字节转成十进制是2  第三个字节转成十进制是13 如果不做处理直接保存就变成了1212,再次解析是就会有歧义,1,2,12; 12,1,2;等等所以把他们保存成16进制,010212,解析是每个两位是一个字节做处理

    实际使用采用了第三种方式


    很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等。因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当然肯定还有其他原因。

    下面提供几种Java中使用的方案:

    方案一:直接利用BigInteger的方法,应该是最简单的方案了。

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. /** 
    2.      * 利用签名辅助类,将字符串字节数组 
    3.      * @param str 
    4.      * @return 
    5.      */  
    6.     public static byte[] md5(String str)  
    7.     {  
    8.         byte[] digest = null;  
    9.         try  
    10.         {  
    11.             MessageDigest md = MessageDigest.getInstance("md5");  
    12.             return digest = md.digest(str.getBytes());  
    13.   
    14.         } catch (NoSuchAlgorithmException e)  
    15.         {  
    16.             e.printStackTrace();  
    17.         }  
    18.         return null;  
    19.     }  
    20.   
    21.       
    22.   
    23.   
    24.     /** 
    25.      * 方式一 
    26.      *  
    27.      * @param bytes 
    28.      * @return 
    29.      */  
    30.     public static String bytes2hex01(byte[] bytes)  
    31.     {  
    32.         /** 
    33.          * 第一个参数的解释,记得一定要设置为1 
    34.          *  signum of the number (-1 for negative, 0 for zero, 1 for positive). 
    35.          */  
    36.         BigInteger bigInteger = new BigInteger(1, bytes);  
    37.         return bigInteger.toString(16);  
    38.     }  
    39.       


    注:项目中偷懒使用BigInteger将字节数组转化为2进制字符串,发现BigInteger会省略前面的几个0,我擦。。。以此铭记。

    方案二:将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. /** 
    2.      * 方式二 
    3.      *  
    4.      * @param bytes 
    5.      * @return 
    6.      */  
    7.     public static String bytes2hex02(byte[] bytes)  
    8.     {  
    9.         StringBuilder sb = new StringBuilder();  
    10.         String tmp = null;  
    11.         for (byte b : bytes)  
    12.         {  
    13.             // 将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制  
    14.             tmp = Integer.toHexString(0xFF & b);  
    15.             if (tmp.length() == 1)// 每个字节8为,转为16进制标志,2个16进制位  
    16.             {  
    17.                 tmp = "0" + tmp;  
    18.             }  
    19.             sb.append(tmp);  
    20.         }  
    21.   
    22.         return sb.toString();  
    23.   
    24.     }  
    方案三:分别取出字节的高四位与低四位然后分别得出10进制0-15这样的值,再利用一个字符串数组完美完成。对于转化的理解,当然最推荐第三种方式了。

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. /** 
    2.      * 方式三 
    3.      *  
    4.      * @param bytes 
    5.      * @return 
    6.      */  
    7.     public static String bytes2hex03(byte[] bytes)  
    8.     {  
    9.         final String HEX = "0123456789abcdef";  
    10.         StringBuilder sb = new StringBuilder(bytes.length * 2);  
    11.         for (byte b : bytes)  
    12.         {  
    13.             // 取出这个字节的高4位,然后与0x0f与运算,得到一个0-15之间的数据,通过HEX.charAt(0-15)即为16进制数  
    14.             sb.append(HEX.charAt((b >> 4) & 0x0f));  
    15.             // 取出这个字节的低位,与0x0f与运算,得到一个0-15之间的数据,通过HEX.charAt(0-15)即为16进制数  
    16.             sb.append(HEX.charAt(b & 0x0f));  
    17.         }  
    18.   
    19.         return sb.toString();  
    20.     }  
    展开全文
  • Java实现MD5加密代码
  • java生成MD5加密字符串

    千次阅读 2017-11-30 10:33:56
    private String getMD5(String sourceStr) throws BaseException { String result = "";... MessageDigest md = MessageDigest.getInstance("MD5"); md.update(sourceStr.getBytes()); byte b[] = m
  • 主要介绍了java实现无符号数转换字符串补齐、md5、uuid、随机数示例,需要的朋友可以参考下
  • Java MD5字符串

    千次阅读 2015-03-09 10:47:12
    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;... * 传入一个字符串String msg,返回Java MD5加密后的16进制的字符串结果。 * 结果形如:c0e84e870874dd37ed0d164c7986f0
  • MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。 MessageDigest 对象开始被初始化。该对象通过使用 ...
  • Java字符串md5加密和文件md51、字符串md5加密 package com.yourcompany.util;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class Encryption { public ...
  • 使用MD5加密,代码如下: packagecom.main.movie.util; importjava.security.MessageDigest; importjava.security.NoSuchAlgorithmException; /** *MD5 * *@authormain * */publiccla...
  • Java实现字符串MD5加密

    2021-06-08 09:32:52
    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Scanner; public class MD5Util { ... public static String ...// 拿到一个MD5转换器(如果想要SHA1参数换
  • JAVA字符串转换MD5

    千次阅读 2019-02-01 09:10:35
    简介:  MD5即Message-Digest Algorithm 5(信息-摘要算法5),...数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。 实现代码:  public static String backMD5(St...
  •  MD5是message-digest algorithm 5(信息-摘要算法)的缩写,是一种计算机安全领域使用的一种散列函数,被广泛应用于加密和解密的技术上,它就像文件的“数字指纹”。  不管是可执行的程序、图像文件、临时文件...
  • JAVA字符串进行MD5加密

    万次阅读 2017-05-07 19:57:57
    字符串进行MD5加密主要是应用在密码存储等地方,下面函数主要是用Java实现对字符串进行MD5加密的功能
  • <转载>JAVA AES DES MD5 加密字符串

    千次阅读 2012-11-20 23:03:31
    效果AES加密: 加密前:test3444 加密后:88E7373C834F8... 加密前: 要加密的字符串 test 加密后: pCpv76PEwJR/7bab04sKNdpzNvL7uHYE5AIfLjpNh2E= 解密后: 要加密的字符串 test 效果MD5加密: 加密前: 1989
  •  下面是来自百度百科的介绍:对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,这四个32位分组级联后...
  • java字符串md5加密

    2017-07-06 16:18:12
    public static String getMD5(String sourceStr) throws NoSuchAlgorithmException { if(sourceStr==null || "".equals(sourceStr.trim())){ return null; } byte[] source=sour
  • 将字符串进行md5加密(加密结果字母为大写),已经写出方法,如下 public static String md5s(String plainText) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText....
  • Can anyone know how to convert the MD5 to String. In my case I have saved the password in MD5 in database. I am trying to retreive the password and display it in string for the editing purpose.This is...
  • 这里介绍的是字符串MD5加密,输出32位大写 工具类代码: import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * MD5加密工具 * */ public ...
  • import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class MD5test { public static void main(String[] args) { String
  • 转载地址:... package com.lyz.utils.file.md5; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputS...
  • Java字符串md5加密

    2019-10-07 16:58:12
    ---恢复内容开始--- /** * 对字符串md5加密 * * @param str * @return * @throws Exception */ public String getMD5Str(String str) throws Exception { try { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,948
精华内容 14,379
关键字:

java将md5转换成字符串

java 订阅