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;
}
}