登录系统中密码用MD5加密有何作用?防谁呢?(附有代码)

在学习PHP100教程时,看到留言板的登录制作,先把MD5加密过的密码形式存储到数据库中,然后通过登陆框输入未加密的原始密码,PHP从后台帮你把原始密码生成对应的MD5,再去和数据库中的MD5密码进行比对,比对一致则登录成功。

我就在弱弱地想,这样的MD5加密,为了防止 谁呢?

如果MD5加密,是为了让密码变成位数更多更复杂的一个字符串,那盗号者通过前端登录页面尝试试错的 方式猜测密码,也是经过MD5帮忙加密的试错啊,盗号者并不需要直接从头到尾测试16位或32位的密码。

如果是防止侵入数据库的黑客,那黑客一是直接指导了MD5形式的密码,可在前端用不再进行密码MD5加密的形式进行登录,当然,如果黑客侵入了数据库,给你把MD5的密码改成111,不就破解了吗?

那么,登录系统制作过程,使用MD5加密到底是为了防止哪种安全隐患呢?



最佳答案
这个加密当然是为了防止信息不被盗取,修改,保护信息啊,黑客入侵的话也是要只要你的加密后的密码才能知道,况且MD5加密后面可以带好多内容,即使你用破解方式来也是不行的,因为你方式不同破解出来的就有区别啊,我用户登录的密码是加密之后通过互联网传输的,然后跟数据库匹配,你数据库密码改成111也是没用的,因为我数据密码传输的时候就已经加密处理了,虽说你密码输入111,但是经过加密后就不是111了,这个跟数据库匹配不同,就永远错的,黑客倒取信息我想不会那么笨,去记原本只有几个字母的密码加密后成了32位的数字,都是盗取原本密码。最后就是跟你说下,这个MD5你现在还没真的了解到它的用处,等你做一个涉及用户注册,登陆,以及账户资金安全的时候你就知道它的重要性了。





最佳答案
 
 

代码片段(1)[全屏查看所有代码]

1. [代码][Java]代码     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
      * MD5加码。32位
      * @param inStr
      * @return
      */
     public static String MD5(String inStr) {
         MessageDigest md5 = null ;
         try {
             md5 = MessageDigest.getInstance( "MD5" );
         } catch (Exception e) {
             System.out.println(e.toString());
             e.printStackTrace();
             return "" ;
         }
         char [] charArray = inStr.toCharArray();
         byte [] byteArray = new byte [charArray.length];
 
         for ( int i = 0 ; i < charArray.length; i++)
             byteArray[i] = ( byte ) charArray[i];
 
         byte [] md5Bytes = md5.digest(byteArray);
 
         StringBuffer hexValue = new StringBuffer();
 
         for ( int i = 0 ; i < md5Bytes.length; i++) {
             int val = (( int ) md5Bytes[i]) & 0xff ;
             if (val < 16 )
                 hexValue.append( "0" );
             hexValue.append(Integer.toHexString(val));
         }
 
         return hexValue.toString();
     }

最佳答案
这个加密当然是为了防止信息不被盗取,修改,保护信息啊,黑客入侵的话也是要只要你的加密后的密码才能知道,况且MD5加密后面可以带好多内容,即使你用破解方式来也是不行的,因为你方式不同破解出来的就有区别啊,我用户登录的密码是加密之后通过互联网传输的,然后跟数据库匹配,你数据库密码改成111也是没用的,因为我数据密码传输的时候就已经加密处理了,虽说你密码输入111,但是经过加密后就不是111了,这个跟数据库匹配不同,就永远错的,黑客倒取信息我想不会那么笨,去记原本只有几个字母的密码加密后成了32位的数字,都是盗取原本密码。最后就是跟你说下,这个MD5你现在还没真的了解到它的用处,等你做一个涉及用户注册,登陆,以及账户资金安全的时候你就知道它的重要性了。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这是一个简单的Java后台登录代码,其密码字段使用了MD5加密。主要思路是将用户输入的密码进行MD5加密,然后与数据库存储的密码进行比较。如果相同,则认为用户登录成功。 ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.sql.*; public class Login { public static void main(String[] args) { String username = "testuser"; String password = "testpassword"; // 用户输入的密码 // 对密码进行MD5加密 String md5Password = getMD5(password); // 连接数据库 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String dbPassword = "password"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = DriverManager.getConnection(url, user, dbPassword); // 查询用户信息 String sql = "SELECT * FROM users WHERE username = ?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); rs = pstmt.executeQuery(); if (rs.next()) { String dbPasswordMD5 = rs.getString("password"); if (dbPasswordMD5.equals(md5Password)) { System.out.println("登录成功!"); } else { System.out.println("密码错误!"); } } else { System.out.println("用户名不存在!"); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } // 对字符串进行MD5加密 public static String getMD5(String message) { String md5 = ""; try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageBytes = message.getBytes(); byte[] md5Bytes = md.digest(messageBytes); for (int i = 0; i < md5Bytes.length; i++) { md5 += Integer.toHexString((md5Bytes[i] & 0xff) | 0x100).substring(1, 3); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return md5; } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值