⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 securitytool.java

📁 国内很牛的软件公司花费两年半开发的用EJB3开发的代码,采用STRUTS和EJB3,目前系统进行第二版.所以拿出来共享
💻 JAVA
字号:
package com.ufmobile.common.security.bo;

public class SecurityTool {
	private static String codestr = "!@#$&*()=:/;?+'%0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n-., ";
	private static int codenum = 83;
	
	public static int encrypt(String source, StringBuffer pdest) {
		int nret;
		int len;
		int n1,n2;
		int nn;
		char[] psorc = source.toCharArray();
		
		len = psorc.length;

		nret = 0;
		n1 = 0;

		while(true)	{
			if(len - n1 < codenum) {
				n2 = len - n1;
			} else {
				n2 = (codenum - 1) - ((int)(System.currentTimeMillis() % (codenum /2)));
			}

			nn = encrypt(source.substring(n1), n2, pdest);
			if(nn < 0)
				return nn;

			n1 = n1 + n2;
			nret = nret + nn;

			if(n1 >= len)
				break;
		}

		return nret;
	}

	public static int decrypt(String source, StringBuffer pdest) {
		int nret;
		int alllen, len, sublen;
		int n1,n2;
		int p1;
		int nn;
		char[] psorc = source.toCharArray();
		nret = 0;
		p1 = 0;

		alllen = psorc.length;
		if(alllen < 4)
			return -2;	//格式错误

		while(true)	{
			n1 = getpos(psorc[p1]);
			n2 = getpos(psorc[p1 + 1]);

			sublen = (n2 + codenum - n1) % codenum;
			len = sublen + 4;
			if(p1 + len > alllen)
				return -2;	//格式错误

			nn = decrypt(source.substring(p1), len, pdest);
			if(nn < 0)
				return nn;

			p1 = p1 + len;
			nret = nret + nn;

			if(p1 >= alllen)
				break;
		}

		return nret;
	}

	private static int encrypt(String source, int len, StringBuffer pdest)	{
		char c;
		int n, i, n1, n2;
		char[] psorc = source.toCharArray();

		n1 = (int)(System.currentTimeMillis() % codenum);
		n2 = (n1 + len) % codenum;
		
		pdest.append(codestr.charAt(n1));
		pdest.append(codestr.charAt(n2));
		
		n1 = (int)((System.currentTimeMillis() + 1) % codenum);
		n1 = (int)((System.currentTimeMillis() + 2) % codenum);
		pdest.append(codestr.charAt(n1));
		pdest.append(codestr.charAt(n2));

		for(i = 0; i < len; i++) {
			c = psorc[i];
			n = getpos(c);
			if(n < 0)
				return n;

			n = (n + codenum + n2 - n1) % codenum;
			pdest.append(codestr.charAt(n));

			n1 = n2;
			n2 = n;
		}
		
		return 4 + i;
	}

	private static int decrypt(String source, int len, StringBuffer pdest)	{
		char c;
		int n, i , n1, n2, nn, sublen;
		char[] psorc = source.toCharArray();

		sublen = len - 4;

		n1 = getpos(psorc[2]);
		n2 = getpos(psorc[3]);

		for(i = 0; i < sublen; i++) {
			c = psorc[4 + i];
			n = getpos(c);
			if(n < 0)
				return n;

			nn = n;
			n = (n + codenum - n2 + n1) % codenum;			
			pdest.append(codestr.charAt(n));
			n1 = n2;
			n2 = nn;
		}
		return i;
	}	
	
	private static int getpos(char c) {
		for(int i = 0; i < codenum; i ++) {
			if(c == codestr.charAt(i))
				return i;
		}
		return -1;
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -