php html密码加密传输,PHP 在 post 前加密用户名、密码,密文传输数据

"本文讨论了使用CryptoJS库进行JavaScript AES加密,并在PHP端解密时遇到的问题。当解密后的结果出现额外的`x00x00`字符时,通过清除这些字符可以得到正确的解密内容。示例代码展示了加密和解密的过程,以及解决问题的方法。"
摘要由CSDN通过智能技术生成

JS加密(使用google crypto-js加密组件,官方地址  本地下载:

d1b234f9ebbac2933c1a4a0d83e619fa.gifCryptoJS-v3.1.2.rar)

var data = "username";

var key  = CryptoJS.enc.Latin1.parse('1234567812345678');

var iv   = CryptoJS.enc.Latin1.parse('1234567812345678');

//加密

var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});

document.write(encrypted);//rwRxKql4WWspSBZcV4HP4A==

PHP解密$privateKey = "1234567812345678";

$iv     = "1234567812345678";

$encryptedData = base64_decode("rwRxKql4WWspSBZcV4HP4A==");

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);

echo 'php---'.$decrypted;

==================================================

当出现无法验证密码的情况,通过Laravel dd一下解密的结果,发现后面多了很多“\x00\x00”

c73341727e1f41bf7033f95247e0110e.png

解决办法:清楚后面的字符$cleaned = strval(str_replace("\0", "", $password));

参考文章:

https://blog.catscarlet.com/201701162689.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值