编写一个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“替换成一个字符串变量,但没成功。。
望达人能指点一下。
为了安全不保存明文,所以想先计算所输入密码的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“替换成一个字符串变量,但没成功。。
望达人能指点一下。
解决方案 »
- 红屏?
- Map的查找用的是什么算法
- 求教基础中的基础问题
- 我在用jdk1.6时在JBUILDER2005下运行程序没有问题,但部署后出现以下问题,急
- java中怎样在面板上多次绘制图片
- Applet怎么读不了文件的内容?
- java applet 不能運行?
- JBuilder7的简单问题(编辑时关标不能正确定位)
- ?????有兴趣看看这个问题??????????????
- Java序列化之 java.io.NotSerializableException: java.nio.HeapByteBuffer
- 很好玩的问题,既然java中接口都这么出色了,为什么还是会在一定程度上用抽象类呢?大家讨论下吧!
- 如何利用JDBC捕获database的动态端口和静态端口
System.out.print("INPUT SOME THING:");
System.out.println(MD5Encode(in.nextLine()));
现在剩下的问题是对原程序的理解,有知道的人能讲解一下吗?
就成Strign miwen=StringUtil.MD5Encode("f");