字符串加密的工具类

这是一个字符串加密的工具类。里面有加密方法,还有验证方法。

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Component;

/**
 * 加密的工具类
 * @author
 */
@Component("encryptUtil")
public class EncryptUtil
{
	/**
	 * 加密字符串
	 * 
	 * 加密算法$随机数$密文(加密算法加密(明文+随机数))
	 * 
	 * sha256$abcd$sha256(11111abcd)
	 * 
	 * @param souStr
	 * @return
	 */
	public String encodeStr(String souStr)
	{
		/* 分隔符 */
		String split = "$";
		/* 加密算法 */
		String encType = "sha256" ; 
		/* 随机数
		 * 生成指定位数的随机数(字母+数字)
		 *  */
		RegexUtil regexUtil = new RegexUtil() ; 
		String randStr = regexUtil.randStr(32);
		
		String jiamaHead = encType + split + randStr + split ; 
		
		/* 加密字符串 */
		String jiamiStr = DigestUtils.sha256Hex(souStr + randStr); 
		return jiamaHead + jiamiStr;
	}
	
	/**
	 * (验证)对比加密字符串
	 * 
	 * 拿着明文再加密一次,比对密文
	 * 
	 * 加密算法$随机数$密文(加密算法加密(明文+随机数))
	 * @param souStr
	 * @return
	 */
	public boolean checkStr(String souStr,String encodeStr)
	{
		/* 分隔符 */
		String split = "$";
		/* 加密算法 */
		String encType = "sha256" ; 
		/* 取随机数 
		 * 按照$拆分
		 * 0:加密算法
		 * 1:随机数
		 * 2:加密后的部分字符串(用不到)
		 * */
		String[] encodeStrs = encodeStr.split("\\"+split);
		/* 拆分后的字符串我只使用了第2个 */
		if(encodeStrs.length == 3)
		{
			/* 传入的密码必须含$ */
			/* 拼装结果的部分字符串 */
			String jiamaHead = encType + split + encodeStrs[1] + split ;
			/* 加密字符串 */
			String jiamiStr = DigestUtils.sha256Hex(souStr + encodeStrs[1]); 
			/* 拼装最终的字符串
			 * 加密算法$随机数$密文(加密算法加密(明文+随机数)) */
			String finalStr = jiamaHead + jiamiStr ; 
			
			/* 验证明文是否一致 */
			return finalStr.equalsIgnoreCase(encodeStr);
		}
		return false ; 
	}


	/**
	 * 生成随机字符串(a-zA-Z0-9)
	 * @param len 长度
	 * @return
	 */
	public String randStr(int len)
	{
		String ALL_STR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ;
		/* 4~ 存储结果 */
		StringBuffer sb = new StringBuffer() ; 
		/* 3~随机生成0-100的数 */
		Random random = new Random() ; 
		for (int i = 0; i < len; i++)
		{
			/* 1~让charAt中的数字,随机:范围是? */
			int randInt = random.nextInt(ALL_STR.length());
			/* 2~指定位置上的char字符 */
			char ch = ALL_STR.charAt(randInt);
			//System.out.println(ch + "---" + randInt);
			sb.append(ch);
		}
		return sb.toString() ; 
	}

	
	public static void main(String[] args)
	{
		EncryptUtil encryptUtil = new EncryptUtil() ; 
//		String res = encryptUtil.encodeStr("111111");
		boolean checkStr = encryptUtil.checkStr("111111", "sha256$yw6Ey5XHYeMahaNhbXENLB4SBt9gXdmf$9993c49cab6dc101869b54f0de98dff05c4b4c82584ac65f31c9e2797e069b18");
		System.out.println(checkStr);
		testenc();
	}





	/**
	 * 测试一些常见的加密算法
	 */
	private static void testenc()
	{
		String souStr = "1login12345678910";
		/*
		 * md5加密 DigestUtils:一定得apache包下面的 文摘
		 * 
		 * 明文:111111 密码:96e79218965eb72c92a549dd5a330112
		 * 
		 * Hex是16进制
		 */
		String md5Str = DigestUtils.md5Hex(souStr);
		System.out.println("==md5Str==" + md5Str + "--->length:" + md5Str.length());

		/* sha256 */
		String sha256Str = DigestUtils.sha256Hex(souStr);
		System.out.println("==sha256Str==" + sha256Str + "--->length:" + sha256Str.length());

		/*
		 * sha512
		 */
		String sha512Str = DigestUtils.sha512Hex(souStr);
		System.out.println("==sha512Str==" + sha512Str + "--->length:" + sha512Str.length());

		/*
		 * Base64 Base64可以加密,也可以解密
		 */
		try
		{
			byte[] souceByte = souStr.getBytes("UTF-8");
			byte[] encodeByte = Base64.encodeBase64(souceByte);
			System.out.println("Base64==souceByte==" + Arrays.toString(souceByte));
			System.out.println("Base64==encodeByte==" + Arrays.toString(encodeByte));
			String encodeStr = new String(encodeByte);
			System.out.println("Base64==encodeStr==" + encodeStr);
			/* 解密 */
			byte[] decodeByte = Base64.decodeBase64(encodeByte);
			System.out.println("Base64==decodeByte==" + Arrays.toString(decodeByte));
			String decodeStr = new String(decodeByte);
			System.out.println("Base64==decodeStr==" + decodeStr);
		} catch (UnsupportedEncodingException e)
		{
			e.printStackTrace();
		}

		/*
		 * URL加密和解密,不需要codec的包 只能对url里面的特殊字符加密:如://?& 如果是非url,无能
		 */
		String url = "http://www.baidu.com?id=1&a=10&b=20";
		try
		{
			String encodeUrl = URLEncoder.encode(url, "UTF-8");
			System.out.println("==URLEncoder===" + encodeUrl);

			String decodeUrl = URLDecoder.decode(encodeUrl, "UTF-8");
			System.out.println("==decodeUrl===" + decodeUrl);
		} catch (UnsupportedEncodingException e)
		{
			e.printStackTrace();
		}

		/*
		 * 明文(公钥):key:(参数1) 盐(私钥):value:(参数2) hex:16进制
		 * 
		 * 加密参数:公钥大家都知道(客户端和服务器端),并且还在http请求头传输 盐:不在请求头传输;
		 * 
		 * 返回值:就是加密的字符串
		 */
		String key = "111111";
		String value = "test";
		String result = HmacUtils.hmacSha256Hex(key, value);
		System.out.println(key + "==hmacSha256Hex====>" + result);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

散装程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值