在javaweb项目中进行MD5加密

这篇博客探讨了在JavaWeb项目中如何使用MD5进行数据加密。文章提到,由于目前没有有效的公开MD5解密算法,加密后的数据通常难以被逆向解密,因此MD5常用于存储密码等敏感信息。
摘要由CSDN通过智能技术生成

加密的java类:

MD5keyBean.java

package cn.itcast.elec.util;

/*******************************************************************************
 * keyBean 类实现了RSA Data Security, Inc.在提交给IETF 的RFC1321中的keyBean message-digest
 * 算法。
 ******************************************************************************/
public class MD5keyBean {
	/*
	 * 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static
	 * final是表示了只读,切能在同一个进程空间内的多个 Instance间共享
	 */
	static final int S11 = 7;
	static final int S12 = 12;
	static final int S13 = 17;
	static final int S14 = 22;
	static final int S21 = 5;
	static final int S22 = 9;
	static final int S23 = 14;
	static final int S24 = 20;
	static final int S31 = 4;
	static final int S32 = 11;
	static final int S33 = 16;
	static final int S34 = 23;
	static final int S41 = 6;
	static final int S42 = 10;
	static final int S43 = 15;
	static final int S44 = 21;
	static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
			0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
			0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
			0, 0, 0, 0, 0, 0, 0 };
	/*
	 * 下面的三个成员是keyBean计算过程中用到的3个核心数据,在原始的C实现中 被定义到keyBean_CTX结构中
	 */
	private long[] state = new long[4]; // state (ABCD)
	private long[] count = new long[2]; // number of bits, modulo 2^64 (lsb
										// first)
	private byte[] buffer = new byte[64]; // input buffer
	/*
	 * digestHexStr是keyBean的唯一一个公共成员,是最新一次计算结果的 16进制ASCII表示.
	 */

	public String digestHexStr;
	/*
	 * digest,是最新一次计算结果的2进制内部表示,表示128bit的keyBean值.
	 */
	private byte[] digest = new byte[16];

	/*
	 * getkeyBeanofStr是类keyBean最主要的公共方法,入口参数是你想要进行keyBean变换的字符串
	 * 返回的是变换完的结果,这个结果是从公共成员digestHexStr取得的.
	 */
	public String getkeyBeanofStr(String inbuf) {
		keyBeanInit();
		keyBeanUpdate(inbuf.getBytes(), inbuf.length());
		keyBeanFinal();
		digestHexStr = "";
		for (int i = 0; i < 16; i++) {
			digestHexStr += byteHEX(digest[i]);
		}
		return digestHexStr;
	}

	// 这是keyBean这个类的标准构造函数,JavaBean要求有一个public的并且没有参数的构造函数
	public MD5keyBean() {
		keyBeanInit();
		return;
	}

	/* keyBeanInit是一个初始化函数,初始化核心变量,装入标准的幻数 */
	private void keyBeanInit() {
		count[0] = 0L;
		count[1] = 0L
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮您解答这个问题。 首先,需要在注册页面添加一个密码输入框。在用户提交表单时,将密码的明文使用MD5算法进行加密,然后将加密后的密文存储到数据库。 以下是一个简单的JavaWeb注册页面示例: ```html <!DOCTYPE html> <html> <head> <title>用户注册</title> </head> <body> <h1>用户注册</h1> <form method="post" action="register"> <label>用户名:</label> <input type="text" name="username" required><br> <label>密码:</label> <input type="password" name="password" required><br> <button type="submit">注册</button> </form> </body> </html> ``` 在后台Java代码,需要使用Java自带的MessageDigest类进行MD5加密,并将加密后的密码存储到数据库。以下是示例代码: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class RegisterServlet extends HttpServlet { private static final String DB_URL = "jdbc:mysql://localhost:3306/mydb"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "password"; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); // 使用MD5算法进行密码加密 String encryptedPassword = encryptPassword(password); // 将用户名和加密后的密码存储到数据库 try { Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); PreparedStatement stmt = conn.prepareStatement("INSERT INTO user (username, password) VALUES (?, ?)"); stmt.setString(1, username); stmt.setString(2, encryptedPassword); stmt.executeUpdate(); response.sendRedirect("login.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("register.jsp"); } } private String encryptPassword(String password) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(password.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(Integer.toHexString((b & 0xFF) | 0x100).substring(1, 3)); } return sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } } ``` 需要注意的是,为了保证密码的安全性,建议在密码加密时添加一些随机字符串作为“盐值”,以增加密码的复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值