项目实践——MD5加密

  在项目中,需要用MD5进行加密,这里分享一个MD5加密类。

MD5加密类:

public class Md5 {
	private static String DEFAULT_JCE = "com.sun.crypto.provider.SunJCE";
    private static String IBM_JCE = "com.ibm.crypto.provider.IBMJCE";
    protected static final Log log = LogFactory.getLog(Md5.class);

    /**
     * 初始化系统加密算法提供者
     */
    static
    {

        try
        {
            Security.addProvider((Provider)Class.forName(DEFAULT_JCE).newInstance());
        }
        catch (Exception e)
        {
            log.info(e);
            try
            {
                Security.addProvider((Provider)Class.forName(IBM_JCE).newInstance());
            }
            catch (Exception ex)
            {
                log.info(ex);
            }
        }
    }

    /**
     * get hex string
     *
     * @param x
     * @return
     */
    private static String hexDigit(byte x)
    {
        StringBuffer sb = new StringBuffer();
        char c;
        // First nibble
        c = (char) ((x >> 4) & 0xf);
        if (c > 9)
        {
            c = (char) ((c - 10) + 'a');
        }
        else
        {
            c = (char) (c + '0');
        }
        sb.append(c);
        // Second nibble
        c = (char) (x & 0xf);
        if (c > 9)
        {
            c = (char) ((c - 10) + 'a');
        }
        else
        {
            c = (char) (c + '0');
        }
        sb.append(c);
        return sb.toString();
    }

    /**
     * 加密
     *
     * @param content
     *            加密内容
     * @return 加密串
     */
    public static String encrypt(String content)
    {
        try
        {
            MessageDigest algorithm = null;
            algorithm = MessageDigest.getInstance("MD5");
            algorithm.reset();
            if (content != null)
            {
                algorithm.reset();
                algorithm.update(content.getBytes());
                byte digest[] = algorithm.digest();
                StringBuffer hexString = new StringBuffer();
                int digestLength = digest.length;
                for (int i = 0; i < digestLength; i++)
                {
                    hexString.append(hexDigit(digest[i]));

                }
                return hexString.toString();
            }
            else
            {
                return "";
            }
        }
        catch (NoSuchAlgorithmException ex)
        {
            //加密过程中出现异常,采用原始的的内容串
            return content;
        }
    }

}

运行测试:

    @Test
    public void testMd5(){

    	System.err.println(this.encrypt("123456"));
    }
    

结果:

e10adc3949ba59abbe56e057f20f883e

用户登录:

	@RequestMapping("/login.do")
	@ResponseBody
	@Override
	public Object login(HttpServletRequest request, HttpServletResponse response) {
		Logger log = Logger.getLogger(getClass());
		String biskeep = "";
		Md5 md5=new Md5();
		try {
			String loginName = request.getParameter("loginName");
			String loginPassword = md5.encrypt(request.getParameter("loginPassword"));
			HttpSession session = request.getSession();
			if (loginName != null && !loginName.trim().equals("")
					&& loginPassword != null
					&& !loginPassword.trim().equals("")) {
				SysUser user = userService.queryUser(loginName, loginPassword);

				biskeep = user.getBiskeep();

				// 查询该用户的部门信息
				String deptIdStr = user.getDepartmentid();
				SysDept sysDept=deptService.queryEntityById(SysDept.class, deptIdStr);

				// SysDept sysDept=null;
				// 查询该用户的角色信息,应该是一个list集合
				String roleIdStr = roleService.getRoleIdStr(user.getId());
				session.setAttribute(ConstValues.LOGIN_DEPT_ID, deptIdStr);
				session.setAttribute(ConstValues.LOGIN_ROLE_ID, roleIdStr);
				session.setAttribute(ConstValues.LOGIN_DEPT_TYPE, sysDept.getCdeptno());
				session.setAttribute("depId", deptIdStr);
				// 将用户信息放入到session中去
				session.setAttribute(ConstValues.LOGIN_USER_NAME,user.getCloginname());
				session.setAttribute(ConstValues.LOGIN_USER_ID, user.getId());
				session.setAttribute(ConstValues.LOGIN_FIRSTNAME,user.getFirstname());
				session.setAttribute(ConstValues.LOGIN_LASTNAME,user.getLastname());
				session.setAttribute(ConstValues.LOGIN_USER_PASSWORD, user.getCpassword());

				String ip = request.getHeader("x-forwarded-for");
				if (ip == null || ip.length() == 0
						|| "unknown".equalsIgnoreCase(ip)) {
					ip = request.getHeader("Proxy-Client-IP");
				}
				if (ip == null || ip.length() == 0
						|| "unknown".equalsIgnoreCase(ip)) {
					ip = request.getHeader("WL-Proxy-Client-IP");
				}
				if (ip == null || ip.length() == 0
						|| "unknown".equalsIgnoreCase(ip)) {
					ip = request.getRemoteAddr();
				}
				log.info("本机ip:" + ip);
				session.setAttribute(ConstValues.LOGIN_IP, ip);
				Map<String, String> param = new HashMap<String, String>();
				param.put("ip", ip);
			}
			JSONObject obj = createSuccessMessage(null);
			obj.put("biskeep", biskeep);

			String depId = (String)  session.getAttribute(ConstValues.LOGIN_DEPT_ID);
			String ss  = (String) session.getAttribute(ConstValues.LOGIN_USER_ID);

			return obj.toString();
		} catch (Exception e) {
			e.printStackTrace();
			return createErrorMessage(e.getMessage()).toString();
		}
	}
时间: 2024-11-05 13:37:10

项目实践——MD5加密的相关文章

MD5加密--项目案例

在项目中最尝使用MD5这种非对称加密的就是用户信息登录了.下面我就以一个简单的登录案例来说明MD5的用法 首先来看几张图: 用户登录页:需要选择要登录的系统,同时输入用户的用户名和密码,验证码才能进入到后台的主页 数据库的管理员的用户名和密码  密码是已经加密好的字段 OK,那么接下里的程序逻辑已经很明确了: 就是在前台页面输入填写好用户名,密码等各种各样的信息,表单提交给后台,在业务逻辑层查一下redis缓存,或者是查一下数据库有没有就好了, 如果有,则跳转到主页,如果没有,则弹出提示框,提醒

iOS开发实践之MD5加密

什么是MD5: 全称是Message Digest Algorithm 5,译为"消息摘要算法第5版" 效果:对输入信息生成唯一的128位散列值(32个字符) MD5的特点: 输入两个不同的明文不会得到相同的输出值 根据输出值,不能得到原始的明文,即其过程不可逆 MD5的应用: 由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用 主要运用在数字签名.文件完整性验证以及口令加密等方面 MD5改进: 加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5 先加密

记录新项目中遇到的技术及自己忘记的技术点【DES加密解密,MD5加密,字符串压缩、解压,字符串截取等操作】

一.DES加密.解密 #region DES加密解密 /// <summary> /// 进行DES加密 /// </summary> /// <param name="pToEncrypt">要加密的字符串</param> /// <param name="sKey">密钥,必须为8位</param> /// <returns>以Base64格式返回的加密字符串</retur

iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的数据加密的时候遇到了一些问题.起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密.RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保存私钥解密数据.(iOS端公钥加密私钥解密.java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不

4、C#进阶:MD5加密、进程、线程、GDI+、XML、委托

MD5加密 将字符串进行加密,无法解密.网上的解密方式也都是在库里找,找不到也没有. 1 protected void Page_Load(object sender, EventArgs e) 2 { 3 string s = "123"; 4 Response.Write(getMd5(s)); 5 } 6 public string getMd5(string str) 7 { 8 MD5 md5 = MD5.Create();//MD5抽象类无法实例化 实例化该方法 9 byt

使用MD5加密的登陆demo

最近接手了之前的一个项目,在看里面登陆模块的时候,遇到了一堆问题.现在记录下来. 这个登陆模块的逻辑是这样的 1 首先在登陆之前,调用后台的UserLoginAction类的getRandomKey方法产生一个随机字符串. 2 在前台获得用户名的登陆密码后,首先是要md5对其加密,之后把加密的结果与之前的随机字符串合并,使用md5再次加密,并把最后的结果作为用户的密码传给后台. 3 后台获得前台的用户名后(用户名全局唯一),先找出这个用户的密码(数据库里的真实密码),先用md5加密,再与第一步产

MVC项目实践,在三层架构下实现SportsStore-01

SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管理.图像上传......是不错的MVC实践项目,但该项目不是放在多层框架下开发的,离真实项目还有一段距离.本系列将尝试在多层框架下实现SportsStore项目,并用自己的方式实现一些功能. 本篇为系列第一篇,包括: ■ 1.搭建项目■ 2.卸载Entity Framework组件,并安装最新版本■ 3.使用

MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

http://www.cnblogs.com/darrenji/p/3809219.html 本篇为系列第一篇,包括: ■ 1.搭建项目■ 2.卸载Entity Framework组件,并安装最新版本■ 3.使用EF Code First创建领域模型和EF上下文■ 4.三层架构设计    □ 4.1 创建DAL层        ※ 4.1.1 MySportsStore.IDAL详解        ※ 4.1.2 MySportsStore.DAL详解 1.搭建项目 MySportsStore.

关于CryptoJS中md5加密以及aes加密的随笔

最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2