编写一个JAVA信息系统程序,假设密码要保存在数据库的某表中,
为了安全不保存明文,所以想先计算所输入密码的MD5值再保存进表,
更进一步就是加个随机值后计算MD5值最后才保存。
自己没掌握好,在网上找了个演示计算MD5的程序,想把它改成所需。有些问题。原文:一个实现MD5的简洁的java类
原程序
[code=Java][/import java.security.MessageDigest;/**
 * Title: MD5Encode
 * Description:
 * Copyright:
 * Company:
 * @author
 * @version 1.0
 */
public class StringUtil
{
public final static String[] hexDigits = 
{
"0","1","2","3","4","5","6","7",
"8","9","a","b","c","d","e","f"}; /**
 * 转换字节数组未16进制字串
 * @param b字节数组
 * @return 16进制字串
 */
public static String byteArrayToHexString(byte[] b){
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++){
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}

private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
} public static String MD5Encode(String origin){
String resultString = null; try {
resultString = new String (origin);
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
}
catch (Exception ex){ }
return resultString;
}

public static void main(String[] args){
System.err.println(MD5Encode("f"));//改变双引号内的字符串输出的MD5才会相应改变

}
}code]因为还没掌握好,这段程序还没能理解清楚。自己改不了。后来同学改成功了,他的做法是把main部分改成:
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                System.out.println(MD5Encode(br.readLine()));}
运行后就是等待输入一个字符串,然后就输出相应MD5值本人实在愚钝,不仅原程序看不懂,这个改法也未能理解。
怎么要throws IOException? 我起初的想法是把”f“替换成一个字符串变量,但没成功。。
望达人能指点一下。

解决方案 »

  1.   

    看书发现用scanner就可以简洁地实现。 Scanner in = new Scanner(System.in);
    System.out.print("INPUT SOME THING:");
    System.out.println(MD5Encode(in.nextLine()));
    现在剩下的问题是对原程序的理解,有知道的人能讲解一下吗?
      

  2.   

    原程序有什么不懂的呀,就是把一个字符串转换成经MD5加密后的另一个字符串,无论明文有多长,密文都是32位的你在其他类方要是用直接调用
    就成Strign miwen=StringUtil.MD5Encode("f");