`
jiaoxujin
  • 浏览: 63387 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

加密密码

阅读更多
package jp.co.smile.common;

import java.io.IOException;
import java.security.*;

/***
* 作者:焦绪进
* 日期:20060804
* 说明:采用摘要算法,由于摘要算法不可逆,所以不容易破解
*       请使用encrypt()方法加密数据,该方法返回加密后的数据
*       然后将该数据存入数据库,字段长度至少>8 (尽量要长些)
*       方法checkDataSame()验证普通字符串是否与加密字符串“相等”
* 请自行删除“测试”的代码及方法
*/
public class PwdCheck {

  /**
   * 参数:String strPwd 参数为待加密的数据
   * 功能:加密数据
   * 说明:采用摘要算法,由于摘要算法不可逆,所以不容易破解
   * */
  public String encrypt(String strPwd) {

    try {
      //摘要算法SHA-1
      java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
      alga.update(strPwd.getBytes());

      byte[] digesta=alga.digest();

      return byte2hex(digesta);

    } catch (java.security.NoSuchAlgorithmException ex) {

      System.out.println("非法摘要算法");
      return "加密出错";
    }

  }

  /**
   * 参数:strPwdDB 为从数据库取出来的已加密字符串
   * 参数:strPwdInput 为从页面取来的用户输入的字符串
   * 说明:两字符串相等返回true,否则返回false
   * */
  public boolean checkDataSame(String strPwdDB, String strPwdInput) {

    try {

      java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
      algb.update(strPwdInput.getBytes());

      String parameter2 = byte2hex(algb.digest());

      //测试用
      System.out.println("你刚才输入的密码已被加密成: " + parameter2);
      //测试用
      System.out.println("正在验证你输入的密码......");

      if (strPwdDB.equals(parameter2)) {
        return true;
      } else {
        return false;
      }
    } catch (java.security.NoSuchAlgorithmException ex) {
      System.out.println("非法摘要算法");
      return false;
    }
  }

  /**
  *二进制转字符串
  *把二进制数组转换成十六进制串,用:号隔开
  *一个字节(8位)对应于一个两位的十六进制数
  */
  public String byte2hex(byte[] b) {

    String hs="";
    String stmp="";

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

      stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));

      if (stmp.length()==1) hs=hs+"0"+stmp;

      else hs=hs+stmp;

      if (n<b.length-1) hs=hs+":";

    }

    return hs.toUpperCase();
  }

  /**
   * 该方法为测试用
   * */
  public static void main(String[] args) {

    byte[] yourInput = new byte[16];
    PwdCheck my = new PwdCheck();
    //请输入“这是被加密的数据”与“数据库”中的数据进行比较
    String getDataFromDB = my.encrypt("这是被加密的数据");

    System.out.println("从数据库取得的加密数据为: " + getDataFromDB);
    System.out.println("请输入密码: ");

    try {

      System.in.read(yourInput, 0, 16);
    } catch (IOException e) {
      e.printStackTrace();
    }

    System.out.println("你刚才输入的密码是: " + new String(yourInput));

    //验证密码的有效性
    if (my.checkDataSame(getDataFromDB, new String(yourInput))) {
      System.out.println("密码正确!");
    } else {
      System.out.println("你输入的密码不正确!");
    }
  }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics