`

Java加密JS

阅读更多
package com.ks.tools;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 李英夫
 * @ClassName AntiCopy
 * @Version 
 * @ModifiedBy
 * @Copyright @ 2010 H&L Technology Inc.
 * @date 2010-6-3 上午08:39:47
 * @description
 */
public class AntiCopy {
	private static int A = 62;
	private static Map<String, String> STYLE = new HashMap<String, String>();
	//初始化加载,有其它操作时在里面添加
	static{
		STYLE.put("WA", "window.alert");
		STYLE.put("DW", "document.write");
	}
	/**
	 * function encode() {
	 *     var code = document.getElementById('code').value;
     *     code = code.replace(/[\r\n]+/g, '');
	 *     code = code.replace(/'/g, "\\'");
	 *     var tmp = code.match(/\b(\w+)\b/g);
	 *     tmp.sort();
	 *     var dict = [];
	 *     var i, t = '';
	 *     for(var i=0; i<tmp.length; i++) {
	 *         if(tmp[i] != t) dict.push(t = tmp[i]);
	 *     }
	 *     var len = dict.length;
	 *     var ch;
	 *     for(i=0; i<len; i++) {
	 *         ch = num(i);
	 *         code = code.replace(new RegExp('\\b'+dict[i]+'\\b','g'), ch);
	 *         if(ch == dict[i]) dict[i] = '';
	 *     }
	 *     document.getElementById('code').value = "eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}("
	 *     + "'"+code+"',"+a+","+len+",'"+ dict.join('|')+"'.split('|'),0,{}))";
	 * }
	 * 
	 * function num(c) {
	 *     return(c<a?'':num(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36));
	 * }
	 */
	/**
	 * Javascript代码混淆器,参照Javascript代码所写.
	 * @author 李英夫 (2010-6-7 下午01:32:27)
	 * @param JSCode Javascript代码
	 * @return String 返回加密码后的代码
	 */
	private static String JSCodeConfuser(String JSCode){
    	String code = JSCode, t = "", ch = "";
    	List<String> list = new ArrayList<String>(), dict = new ArrayList<String>();
    	/**
    	 * 1.Java中四个\代表一个在传化时还要多添一个\才不会错
    	 * 2.去换行
    	 * 3.不能将\"替换掉
    	 * 4.将'变成\'
    	 */
    	code = code.replaceAll("\\\\", "\\\\\\\\").replaceAll("\r\n", "").replaceAll("[^\"]\\\\", "\").replaceAll("'", "\\\\'");
    	Pattern p = Pattern.compile("(?m)\\b(\\w+)\\b");
        Matcher matcher = p.matcher(code);
        while (matcher.find())  list.add(matcher.group());
        String[] rs = (String[]) list.toArray(new String[list.size()]);
        Arrays.sort(rs);
        for(int i = 0;i < rs.length; i++){
        	if(!rs[i].equals(t)){
        		t = rs[i];
        		dict.add(t);
        	}
        }
        int len = dict.size();
        for(int i = 0; i < len; i++){
        	ch = num(i);
        	code = code.replaceAll("\\b"+dict.get(i)+"\\b", ch);
        	if(ch.equals(dict.get(i))) {
        		dict.remove(i);
        		dict.add(i, "");
        	}
        }
        StringBuffer dictStr = new StringBuffer();
        for(int i = 0; i < dict.size(); i++) dictStr.append(dict.get(i)).append("|");
        String temp = dictStr.toString().substring(0, dictStr.toString().length()-1);
        return "eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}("
        	+ "'"+code+"',"+A+","+len+",'"+ temp +"'.split('|'),0,{}))";
    }
	
	/**
	 * 参照Javascript代码
	 * @author 李英夫(2010-6-7 下午01:32:27)
	 * @param c
	 * @return String
	 */
	private static String num(int c) {
    	return(c<A?"":num((int)(c/A)))+((c=c%A)>35?(char)(c+29):Integer.toString(c,36));
    }
	
	 /**
     * 字符串转Unicode(Javascript专用%u形式)
     * @author 李英夫(2010-6-7 下午01:53:05)
     * @param str
     * @return String
     */
    private static String stringToUnicode(String str){
    	StringBuffer unStr = new StringBuffer();
    	for(char c : str.toCharArray()){    
    		//只转汉字
    		String cStr = c+"";
    		if(cStr.matches("[^\\x00-\\xff]")) unStr.append("%u" + Integer.toHexString(c));
    		else unStr.append(c);
        }   
    	return unStr.toString();
    }
    
    /**
     * Unicode转字符串(Javascript专用%u形式)
     * @author 李英夫(2010-6-7 下午01:50:50)
     * @param str
     * @return String
     */
    private static String unicodeToString(String str) {    
        Pattern pattern = Pattern.compile("(%u(\\p{XDigit}{4}))");    
        Matcher matcher = pattern.matcher(str);    
        char ch;    
        while (matcher.find()) {     
            ch = (char) Integer.parseInt(matcher.group(2), 16);     
            str = str.replace(matcher.group(1), ch + "");    
        }    
        return str;   
    }   
    
	/**
	 * 加密(默认)
	 *     默认是document.write,以后功能多了可以重载这个方法,
	 *     可以加一个参数encrypted(String content, String style),
	 *     如:window.alert
	 * @author 李英夫(2010-6-7 下午01:53:47)
	 * @param content 内容
	 * @return String 返回Javascript代码的加密形式
	 */
	public static String encrypted(String content){
		String s = STYLE.get("DW")+"(unescape('" + stringToUnicode(content) + "'));";
		return JSCodeConfuser(s);
	}
	
	/**
	 * 加密重载
	 * @author 李英夫(2010-6-7 下午02:00:53)
	 * @param content 内容
	 * @param style 方式
	 * @return String 返回Javascript代码的加密形式,
	 * @throws Exception String
	 */
	private static String encrypted(String content, String style)throws Exception{
		if(null == STYLE.get(style)) throw new Exception("this style,"+style+",is not unavailable!");
		String s = STYLE.get(style)+"(unescape('" + stringToUnicode(content) + "'));";
		return JSCodeConfuser(s);
	}
    public static void main(String[] args)throws Exception{
//    	/**
//    	 * 问题代码
//    	 */
////    	String chinese = "<pre> public static String UnicodeToString(String str) {"
////		    	+"Pattern pattern = Pattern.compile(\"\\\");"
////		        +"Matcher matcher = pattern.matcher(str);//这是一个注释,。!~·!#¥%……——*()"    
////		        +"char ch;//这是一个注释ㄆㄊㄍㄐㄗぬねノハヒ】〈〕》〗)]{』」'"∶‖~々”“’‘`|'〃"    
////		        +"while (matcher.find()) {//这是一个注释 "    
////		        +"ch = (char) Integer.parseInt(matcher.group(2), 16);//这是一个注释"     
////		        +"str = str.replace(matcher.//这是一个注释group(1), ch + \");//这是一个注释"   
////		        +"}"   
////		        +"return str;"   
////		        +"}</pre>"; 
    	String chinese ="<li>&nbsp;A.&nbsp;慢性肾小球肾炎肾病型</li><li>&nbsp;B.&nbsp;慢性肾炎晚期</li><li>&nbsp;C.&nbsp;慢性肾炎急性发作</li><li>&nbsp;D.&nbsp;间质性肾炎</li><li>&nbsp;E.&nbsp;肾肿瘤</li>";
    	System.out.println(encrypted(chinese));
    }
}
分享到:
评论

相关推荐

    java 混淆、加密js代码

    Java混淆和加密JavaScript代码是保护Web应用程序源代码安全的重要手段,尤其是在公开发布或者与第三方共享时,能够防止恶意用户分析和篡改代码。本压缩包包含的资源专注于这个主题,让我们详细了解一下相关知识点。 ...

    java和javascript之间的DES加密解密

    Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...

    前台js后台java加密解密

    前台对from表单提交的数据进行js加密,后台对前台提交过来的代码进行解密,后台代码为java

    des加密算法(js+java)js加密 java解密

    des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...

    AES实现前端JS和后端java加密解密

    在本文中,我们将深入探讨如何在前端JavaScript和后端Java中实现AES的加密与解密。 前端JavaScript实现AES加密: 1. **引入库**:前端通常会使用如CryptoJS这样的JavaScript库来实现AES加密。CryptoJS是一个开放...

    java js RSA加密支持超长加密

    在JavaScript中,没有内置的RSA加密库,但可以使用第三方库,如`node-rsa`或`crypto-js`。这些库提供了类似的公钥/私钥生成和加密/解密功能。需要注意的是,由于JavaScript环境的安全限制,浏览器端可能无法直接处理...

    Base64加密解密java/js

    参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。 因为是参照 js Base64写的java实现,所以代码可实现前台js,后台java的加密,...

    JAVA版的JS代码加密器

    至于"jsEncoder"这个文件,很可能是这个Java加密器的实现或者是一些示例代码。如果想要深入了解或使用这个工具,你需要查看文件内容,根据提供的文档或者代码注释来学习如何使用和集成到你的项目中。 总的来说,...

    JS前台加密,java后台解密实现

    在网络安全领域,数据加密是保障信息安全的重要手段。...综上所述,JS前台加密与Java后台解密是实现用户信息安全传输的一种有效策略。正确实施加密和解密流程,结合其他安全实践,能够大大提高网络应用的安全性。

    Java-Js双向Des对称加密Demo

    本示例"Java-Js双向Des对称加密Demo"提供了在Java和JavaScript两个平台间实现DES加密解密的互操作性。下面将详细阐述DES加密解密的核心原理、Java和JavaScript的实现细节以及如何在两者之间进行兼容。 DES是一种块...

    javascript加密java解密

    JavaScript加密和Java解密是两种在软件开发中用于保护数据安全的技术。JavaScript通常用于前端,为用户提供了交互式体验,但因为代码可被浏览器直接查看,所以可能存在安全风险。为了保护敏感信息,开发者可能选择对...

    可互操作的Java和JavaScript AES/128/192/256加密算法代码

    本主题主要关注的是如何在Java和JavaScript之间实现可互操作的AES(Advanced Encryption Standard)加密算法,这涉及到128、192和256位的密钥长度。AES是一种广泛应用的块密码,以其高效性和安全性著称,广泛用于...

    RSA加密解密 JS加密 JAVA解密 【完美版】

    经过本人修改,简化并完善了别人的代码,使其更加的容易理解和学习! 此为一个完整的项目,...功能:服务端随机生成密钥,JS用公钥加密,服务端用私钥解密。用到的JS加密文件是从官网下载的最新版,速度快,稳定性好!

    js&java DES加密互通

    JavaScript(JS)作为前端的主要脚本语言,而Java则广泛应用于后端服务,两者之间的数据交换往往需要进行加密处理以确保安全。本文将深入探讨如何在JavaScript和Java之间实现DES(Data Encryption Standard)加密的...

    aes、ras,前端js加密,后端java解密

    在给定的标题和描述中,我们涉及到了两种主要的加密算法:AES(高级加密标准)和RSA( Rivest-Shamir-Adleman),以及它们在前端JavaScript和后端Java中的应用。下面将详细解释这些知识点。 **AES(高级加密标准)*...

    Java RSA加密前后端实现

    在这个项目"Java RSA加密前后端实现"中,前端部分可能使用JavaScript实现了RSA加密。JavaScript作为客户端语言,可以方便地在用户浏览器中运行,对用户的密码或其他敏感信息进行加密,然后将加密后的数据发送到...

    java后台及前端js使用AES互相加解密及前端md5加密

    本主题涉及的是在Java后台与前端JavaScript之间利用AES(Advanced Encryption Standard)进行加解密,以及前端的MD5(Message-Digest Algorithm 5)加密技术。以下是关于这些知识点的详细解释: 1. **AES加密**:...

    可以互操作的Java和Javascript RSA加密解密程序

    在“可以互操作的Java和Javascript RSA加密解密程序”中,我们看到这种技术被巧妙地应用于Java和JavaScript两个不同的编程环境中,实现跨平台的加密解密互操作。 首先,我们需要理解RSA算法的基本原理。RSA基于大数...

    5.Java+js RSA非对称加密.rar

    本案例中,"5.Java+js RSA非对称加密.rar"是一个压缩包,包含了使用Java和JavaScript实现RSA非对称加密的代码示例。下面将详细解释相关知识点。 1. **非对称加密**: 非对称加密与对称加密不同,它使用一对公钥和...

    AES JS加密JAVA解密

    在这个场景中,"AES JS加密JAVA解密" 提到的是使用JavaScript进行AES加密,然后在Java环境中对加密后的数据进行解密的过程。下面我们将深入探讨这个主题。 首先,AES加密的基本原理是通过一个密钥和一系列复杂的...

Global site tag (gtag.js) - Google Analytics