日期:2014-05-16  浏览次数:20610 次

MD5加密调用 数据库存加密数据
编写一个Java程序,利用Swing、IO流、JDBC技术完成一个注册、登录功能。
要求:
1. 注册时要上传用户照片。
2. 照片大小小于1M的将其保存到数据库中,超过1M的保存到磁盘文件中。
3. 必须对用户密码进行加密。
4. 登录时必须查询数据库对用户名及其加密后的密码进行验证。
5. 登录成功后显示用户名、密码、用户所上传的照片。



半成品 开发速度太垃圾了

操作系统:win98
    编程工具:VB5.0
    用vb中的picture控件的line在picture控件中绘制完图形后,把图形放在和该控件相连接的ACCESS数据库中的一个字段中(字段定义类型为OLE),这样做数据库所占用磁盘空间很大,不知怎样做,才能使其占用很小的存储空间。

回答:

    把图形放在Access数据库中会使文件尺寸增加不少。你可以只在数据库中保存文件名,而将图片放在单独的目录中,每次从磁盘中动态读入,这样占的地方比较少。
    另外,你可以把BMP格式转换为GIF或JPEG格式。参考:QA000398 "如何在VB中编程使.bmp文件转换为.gif或.jpg文件"

//数据库MD5加密
package MD5CopePassWord;



import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

public class MD5Encrypt {
	//随机值(12位,由系统产生) 加盐
	//原码(123)
	//密码
	//随机值 + 密码     (保存到数据库)
	public static byte[] doEncrypt(String password) throws NoSuchAlgorithmException,
			UnsupportedEncodingException {
		SecureRandom random = new SecureRandom();
		byte[] salt = new byte[12];
		byte[] encryptPassword = null;
		random.nextBytes(salt);
		for(byte b : salt){
			System.out.print(b + "\t");
		}
		System.out.println();
		MessageDigest messageDigest = MessageDigest.getInstance("MD5");
		messageDigest.update(salt);  //追加
		messageDigest.update(password.getBytes());
		byte[] digest = messageDigest.digest();
		encryptPassword = new byte[digest.length + 12];
		System.arraycopy(salt, 0, encryptPassword, 0, 12);
		System.arraycopy(digest, 0, encryptPassword, 12, digest.length);
		System.out.println(encryptPassword.length);
		for(byte b : encryptPassword){
			System.out.print(b + "\t");
		}
		return encryptPassword;
	}
}