SHA算法JAVA的實現

 import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

final class SHAImpl {

    private final int PADSIZE = 20;
    private byte key[];
    private MessageDigest md = null;
    //private SecureRandom sr = null;

    public SHAImpl(BigInteger bi) {
        //sr = new SecureRandom();
        key = bi.toByteArray();

        try {
            md = MessageDigest.getInstance("SHA");
        } catch (NoSuchAlgorithmException e) {
            System.err.println("Yow! NoSuchAlgorithmException."
                    + " Abandon all hope");
        }
    }

    public String encode(String message) {
        byte _input[] = new byte[PADSIZE];
        try {
            for (int i = 0; i < PADSIZE; i++)
                _input[i] = (byte) message.charAt(i);
        } catch (StringIndexOutOfBoundsException e) {}

        byte _ciph;
        byte[] _digest = new byte[PADSIZE];
        String _out = "";

        md.reset();
        md.update(key);
        _digest = md.digest();

        for (int i = 0; i < PADSIZE; i++) {
            _ciph = (byte) (_digest[i] ^ _input[i]);
            _out += Character.toString((char) _ciph);
        }
        return _out;
    }

    public String decode(String message) {
        byte _input[] = new byte[PADSIZE];
        try {
            for (int i = 0; i < PADSIZE; i++) {
                _input[i] = (byte) message.charAt(i);
            }
        } catch (StringIndexOutOfBoundsException e) {}

        byte _plain;
        byte[] _digest = new byte[PADSIZE];
        String _out = "";

        md.reset();
        md.update(key);
        _digest = md.digest();

        for (int i = 0; i < PADSIZE; i++) {
            _plain = (byte) (_digest[i] ^ _input[i]);
            _out += Character.toString((char) _plain);
        }
        return _out;
    }
   
    public static void main(String[] args){
     SHAImpl _sha = new SHAImpl(new BigInteger("1234"));
     String pass = jdbc();
     String encode = _sha.decode(pass);
     System.out.println(encode.trim());
    }
   
    public static String jdbc(){
     Connection conn = null;
     PreparedStatement stmt = null;
  ResultSet rs = null;
  String phonePass = null;
  try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
   conn = DriverManager.getConnection("jdbc:oracle:thin:@**:1521:**", "*", "*");
   System.out.println("connect succeed!");
   stmt = conn.prepareStatement("select phone_pass from agent where emp_no = ? ");
   stmt.setString(1,"*");
   rs = stmt.executeQuery();
   while (rs.next()) {
    phonePass = rs.getString(1);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   try{
    rs.close();
    stmt.close();
    conn.close();
   }catch (Exception e) {
    System.out.println("暈,關閉的時候出錯了!");
    e.printStackTrace();
   }
  }
  return phonePass;
    }
   

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值