java生成密码生成

一、根据当前日期生成MD5加密密码


package com.test;

import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Md5Test {
     
     public void toMD5(String plainText) {
          try {
               //生成实现指定摘要算法的 MessageDigest 对象。
               MessageDigest md = MessageDigest.getInstance("MD5");    
               //使用指定的字节数组更新摘要。
               md.update(plainText.getBytes());
               //通过执行诸如填充之类的最终操作完成哈希计算。
               byte b[] = md.digest();
               //生成具体的md5密码到buf数组
               int i;
               StringBuffer buf = new StringBuffer("");
               for (int offset = 0; offset < b.length; offset++) {
                    i = b[offset];
                    if (i < 0)
                        i += 256;
                    if (i < 16)
                        buf.append("0");
                    buf.append(Integer.toHexString(i));
               }
               System.out.println("32位: " + buf.toString());// 32位的加密
               System.out.println("16位: " + buf.toString().substring(8, 24));// 16位的加密,其实就是32位加密后的截取
          } 
          catch (Exception e) {
              e.printStackTrace();
          }
     }
    
     public static void main(String agrs[]) {
         SimpleDateFormat sdf =   new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss ");
         String str = sdf.format(new Date());
         new Md5Test().toMD5(str);//加密LXD
     }
}



原文链接:http://www.cnblogs.com/xudong-bupt/archive/2013/05/10/3070899.html


二、生成密码明文和加密后的密码


import sun.misc.BASE64Encoder;

import java.util.Random;
import java.security.MessageDigest;

public class PasswordCreator {

    public static class GeneratedPassword {
        private String clearText;
        private String encrypted;

        private GeneratedPassword(String clearText, String encrypted) {
            this.clearText = clearText;
            this.encrypted = encrypted;
        }

        public String getClearText() {
            return clearText;
        }

        public String getEncrypted() {
            return encrypted;
        }
    }
    //the below number 13,58,74 you can change any number for you company.
    public static GeneratedPassword generate(int length) {
        Random rnd = new Random(System.currentTimeMillis());
        int letterLength = length - 1;
        byte[] buf = new byte[letterLength];
        for (int i = 0; i < letterLength; ++i) {
            int idx = Math.abs(rnd.nextInt()) % 13;
            int offset = idx % 2 == 1 ? 58 : 74;
            int ch = offset + idx;
            buf[i] = (byte) ch;
        }
        String clearText = insertRandomNumber(buf);
        String encrypted = encryptUnsaltedSha1(clearText);

        return new GeneratedPassword(clearText, encrypted);
    }
    //the below number 9, you can change any number for you company.
    private static String insertRandomNumber(byte[] buf) {
        StringBuffer sb = new StringBuffer(new String(buf));
        Random rnd = new Random(System.currentTimeMillis());
        int number = Math.abs(rnd.nextInt()) % 9;
        int offset = Math.abs(rnd.nextInt()) % (sb.length());
        sb.insert(offset, number);
        return sb.toString();
    }

    private static String encryptUnsaltedSha1(String password) {
        try {
            String alg = "SHA-1";
            MessageDigest digest = MessageDigest.getInstance(alg);
            digest.update(password.getBytes("UTF-8"));
            return new BASE64Encoder().encode(digest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    
    //Other service can invoke this util like below:
      public static void main(String[] args) {
        GeneratedPassword password=generate(6);
        System.out.println(password.getClearText());
        System.out.println(password.getEncrypted());
        }
    /*the output like below:
    JNRR6A
    Yvp+P0KeFaBjamzJ3wW8yDUafko=*/
}
原文链接:http://my.oschina.net/forrest420/blog/103787







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值