javaWeb(购物车项目)

本文介绍了如何创建一个全局的编码过滤器,确保每个界面的字符编码统一为UTF-8,同时详细讲解了MD5消息摘要算法的工作原理和在信息安全中的应用。MD5是一种广泛使用的128位散列函数,用于确保信息传输的一致性。文中还给出了MD5加密的Java实现代码,展示了如何将字符串转换为MD5哈希值。
摘要由CSDN通过智能技术生成

第一步创建表

car_user 用户表

car_order 订单表

car_order_item 订单项表

car_goods 商品表

可以做一个设置编译码的过滤器,让每个界面都进行过滤,就不用每个界面都进行编译码设置了

/**编码过滤器
 * @author zjjt
 *
 */
@WebFilter("/*")
public class EncodingFilter implements Filter{
 
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        //设置编码
        req.setCharacterEncoding("utf-8");
        
        //让你通过
        chain.doFilter(req, resp);
        
    }
 
    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }  
}
 

MD5

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。

密码散列函数(Cryptographic hash function),又译为加密散列函数,是散列函数的一种。

MD4算法在安全上有大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用,比如MD5加密算法.
代码:

import java.security.MessageDigest;
 
public class T2 {
 
public static String Test_MD5(String str) {
 
 try {
   //MessageDigest类是一个加密算法的抽象类,需要先获取它的对象
   MessageDigest md = MessageDigest.getInstance("MD5"); //获取MD5的对象。
   
   //getBytes(),把字符串转为byte[]数组。
   //是对信息的填充和打乱
   md.update(str.getBytes());
   
   //对摘要后的信息进行哈希计算得到一个16字节的字节数组
   byte b[] = md.digest();
   //System.out.println("b的长度为:" + b.length);//16
   
   //String与StringBuffer它们都可以存储和操作字符串,StringBuffer操作字符串要比String性能好 
   StringBuffer buf = new StringBuffer();
   
   int i;
   
   //为了得到定长的数据,因此还需要对数据进行处理,我们知道Byte是8位即一字节,先转换为int整型再转为16进制时一般是会转换为两位的16进制。
   //0.为什么要转换为整型呢,因为java 中对byte的所有运算操作均会是首先将byte转化为int, 再行运算。
   //1.为什么要转为16进制,因为MD5的输出是16进制,为什么呢,因为原本MD5是输出128位,但是128位太长且不易存储,即转换为32位的16进制。32*4=128.
   //2.我们知道Byte的范围是在[-128,127],即在byte转化为整型的时候会出现负数,而我们输出的结果不该有负数,即我们需要对于负数的值转化为正数。
   //3.对于第二点的方法,就是判断若为负数,则需要对其  加256 为什么是256呢,这又是一个大的话题,
   //4.还有一种情况,如果数值小于16,那么只会产生一位16进制,而我们需要得到的是2位的16进制,因此需要进行补0,如 若值为 15,则对应16进制应该写出:0F
   for(int offset = 0; offset < b.length; offset++) {
    
    	//先把 byte转化为int。
    	i = b[offset];
    
    	//这种情况是i为负数情况
    	if(i < 0) {
     		i += 256; //相当于  i = i & 0xff;为什么呢,请看上面第三点的博客。
    	}
    
   	//这种情况是i小于16,只会有一位16进制,则我们自己补个0
    	if(i < 16) {
     		buf.append("0");
    	}
    	buf.append(Integer.toHexString(i));
   }
   str = buf.toString(); 
  } catch (Exception e) {
   e.printStackTrace();
  }
  //最后128位就变成了 32位的16进制,即32*4=128;
 return str;
}
 
public static void main(String[] arg) {
  System.out.println("待加密内容为:  " + "adc");
  System.out.println("加密后内容为:  " +Test_MD5("adc"));
 }
}
————————————————
版权声明:本文为CSDN博主「黩817」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_66939060/article/details/124409710

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值