用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

各种加密算法的java实现,比如MD5等——Encrypt

2018-05-07 作者: 起湾道辉哥举报

[java]代码库

import java.security.MessageDigest;
 
import org.springframework.util.StringUtils;
 
/**
 * 各种加密算法的java实现,比如MD5等.
 *
 *
 */
public class Encrypt {
    /**
     * 使用MD5加密指定的字符串.
     *
     * @param s
     * @return
     */
    public final static String MD5(String s) {
        if (!StringUtils.hasText(s)) {
            return "";
        }
        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f' };
        try {
            byte[] strTemp = s.getBytes("UTF-8");
            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
            mdTemp.update(strTemp);
            byte[] md = mdTemp.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }
 
    /**
     * 加密指定的整型数,通常用来加密ID值!
     * <P>
     * 编码的原理是根据当前的currentTimeMillis在指定的位置插入其ID值,然后再附加
     * ID值的长度来进行编码.System.currentTimeMillis获取的值为13位长度,即使100
     * 年后也是这样,所以这个基本上是不变的!
     *
     * @param id
     * @return
     */
    private final static int ENCODE_ID_INSERT_INDEX = 5; // 插入的索引位置,0-12之间
 
    public final static String encodeId(int id) {
        String _id = String.valueOf(id);
        if (id < 0 || _id.length() > 9)
            return "";
        StringBuilder buf = new StringBuilder();
        buf.append(System.currentTimeMillis());
        for (int i = 0; i < _id.length(); i++) {
            buf.insert(ENCODE_ID_INSERT_INDEX, _id.charAt(i));
        }
        buf.append(_id.length()); // 长度校验位
        return buf.toString();
    }
 
    /**
     * 反编码ID后的字符串.
     * <P>
     * 注意,编码和解码的数字长度不能超过9位!
     *
     * @param str
     * @return
     */
    public final static int unencodeId(String str) {
        String times = System.currentTimeMillis() + "";
        if (str == null || str.length() < times.length())
            return 0;
        if (!str.matches("\\d{13,}"))
            return 0;
        int len = Integer.parseInt(str.substring(str.length() - 1));
        if (str.length() != (times.length() + len + 1))
            return 0;
        return Integer.parseInt(new StringBuilder(str.substring(
                ENCODE_ID_INSERT_INDEX, ENCODE_ID_INSERT_INDEX + len)).reverse()
                        .toString());
    }
 
    public static void main(String[] args) {
        System.out.println((MD5("123")));
        String tmp = encodeId(13455787);
        System.out.println(tmp);
        System.out.println(unencodeId(tmp));
    }
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...