当前位置: 代码迷 >> J2SE >> 怎么获取MD5返回值为长度为16的byte[]数组,怎么返回当前时间戳,精确到秒
  详细解决方案

怎么获取MD5返回值为长度为16的byte[]数组,怎么返回当前时间戳,精确到秒

热度:403   发布时间:2016-04-24 18:10:35.0
如何获取MD5返回值为长度为16的byte[]数组,如何返回当前时间戳,精确到秒
麻烦高手帮忙解决下面两个问题
1.我看Java标准的md5算法都是返回的长度为32的字符串,我需要的是返回长度为16的byte[]数组,怎么办呢?
2.java的获取当前时间戳的函数返回的时间戳都是精确的毫秒的long类型,我想获取精确到秒的int类型,怎么办呢?

小妹急需解决上面两个问题,请各位高人不吝赐教。小妹多谢啦!

------解决方案--------------------
Java 中的 MessageDigest MD5 就是返回 16 个长度的 byte[] 啊?

Java code
import java.security.MessageDigest;public class Test {    private final static char[] HEX = "0123456789abcdef".toCharArray();    public static void main(String[] args) throws Exception {        MessageDigest digest = MessageDigest.getInstance("md5");        byte[] bys = digest.digest("123456".getBytes("UTF-8"));        // MD5 摘要的字节长度        System.out.println("我是 123456 MD5 摘要后的字节个数:" + bys.length);        // 看看 123456 MD5 摘要的十六进制值是什么        System.out.println("我是 123456 MD5 摘要的 16 进制表示:" + toHex(bys));        // 获得 int 类型的秒还不简单么?        int seconds = (int)(System.currentTimeMillis() / 1000);        System.out.println("我就是自 Unix 纪元以来经过的秒数:" + seconds);    }    public static String toHex(byte[] bys) {        if (bys == null) {            return null;        }        char[] chs = new char[bys.length * 2];        for (int i = 0, k = 0; i < bys.length; i++) {            chs[k++] = HEX[(bys[i] & 0xf0) >> 4];            chs[k++] = HEX[bys[i] & 0xf];        }        return new String(chs);    }}
------解决方案--------------------
第一个问题有32个字符有64个字节,你才给出16个字节,好装不下,
第一个问题获取时间后,再除以1000,(再试试强制转为int,如果实在太long了,好像也没办法了)
  相关解决方案