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> A. 慢性肾小球肾炎肾病型</li><li> B. 慢性肾炎晚期</li><li> C. 慢性肾炎急性发作</li><li> D. 间质性肾炎</li><li> E. 肾肿瘤</li>";
System.out.println(encrypted(chinese));
}
}
分享到:
相关推荐
Java混淆和加密JavaScript代码是保护Web应用程序源代码安全的重要手段,尤其是在公开发布或者与第三方共享时,能够防止恶意用户分析和篡改代码。本压缩包包含的资源专注于这个主题,让我们详细了解一下相关知识点。 ...
Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...
前台对from表单提交的数据进行js加密,后台对前台提交过来的代码进行解密,后台代码为java
des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...
在本文中,我们将深入探讨如何在前端JavaScript和后端Java中实现AES的加密与解密。 前端JavaScript实现AES加密: 1. **引入库**:前端通常会使用如CryptoJS这样的JavaScript库来实现AES加密。CryptoJS是一个开放...
在JavaScript中,没有内置的RSA加密库,但可以使用第三方库,如`node-rsa`或`crypto-js`。这些库提供了类似的公钥/私钥生成和加密/解密功能。需要注意的是,由于JavaScript环境的安全限制,浏览器端可能无法直接处理...
参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。 因为是参照 js Base64写的java实现,所以代码可实现前台js,后台java的加密,...
至于"jsEncoder"这个文件,很可能是这个Java加密器的实现或者是一些示例代码。如果想要深入了解或使用这个工具,你需要查看文件内容,根据提供的文档或者代码注释来学习如何使用和集成到你的项目中。 总的来说,...
在网络安全领域,数据加密是保障信息安全的重要手段。...综上所述,JS前台加密与Java后台解密是实现用户信息安全传输的一种有效策略。正确实施加密和解密流程,结合其他安全实践,能够大大提高网络应用的安全性。
本示例"Java-Js双向Des对称加密Demo"提供了在Java和JavaScript两个平台间实现DES加密解密的互操作性。下面将详细阐述DES加密解密的核心原理、Java和JavaScript的实现细节以及如何在两者之间进行兼容。 DES是一种块...
JavaScript加密和Java解密是两种在软件开发中用于保护数据安全的技术。JavaScript通常用于前端,为用户提供了交互式体验,但因为代码可被浏览器直接查看,所以可能存在安全风险。为了保护敏感信息,开发者可能选择对...
本主题主要关注的是如何在Java和JavaScript之间实现可互操作的AES(Advanced Encryption Standard)加密算法,这涉及到128、192和256位的密钥长度。AES是一种广泛应用的块密码,以其高效性和安全性著称,广泛用于...
经过本人修改,简化并完善了别人的代码,使其更加的容易理解和学习! 此为一个完整的项目,...功能:服务端随机生成密钥,JS用公钥加密,服务端用私钥解密。用到的JS加密文件是从官网下载的最新版,速度快,稳定性好!
JavaScript(JS)作为前端的主要脚本语言,而Java则广泛应用于后端服务,两者之间的数据交换往往需要进行加密处理以确保安全。本文将深入探讨如何在JavaScript和Java之间实现DES(Data Encryption Standard)加密的...
在给定的标题和描述中,我们涉及到了两种主要的加密算法:AES(高级加密标准)和RSA( Rivest-Shamir-Adleman),以及它们在前端JavaScript和后端Java中的应用。下面将详细解释这些知识点。 **AES(高级加密标准)*...
在这个项目"Java RSA加密前后端实现"中,前端部分可能使用JavaScript实现了RSA加密。JavaScript作为客户端语言,可以方便地在用户浏览器中运行,对用户的密码或其他敏感信息进行加密,然后将加密后的数据发送到...
本主题涉及的是在Java后台与前端JavaScript之间利用AES(Advanced Encryption Standard)进行加解密,以及前端的MD5(Message-Digest Algorithm 5)加密技术。以下是关于这些知识点的详细解释: 1. **AES加密**:...
在“可以互操作的Java和Javascript RSA加密解密程序”中,我们看到这种技术被巧妙地应用于Java和JavaScript两个不同的编程环境中,实现跨平台的加密解密互操作。 首先,我们需要理解RSA算法的基本原理。RSA基于大数...
本案例中,"5.Java+js RSA非对称加密.rar"是一个压缩包,包含了使用Java和JavaScript实现RSA非对称加密的代码示例。下面将详细解释相关知识点。 1. **非对称加密**: 非对称加密与对称加密不同,它使用一对公钥和...
在这个场景中,"AES JS加密JAVA解密" 提到的是使用JavaScript进行AES加密,然后在Java环境中对加密后的数据进行解密的过程。下面我们将深入探讨这个主题。 首先,AES加密的基本原理是通过一个密钥和一系列复杂的...