/** * Tencent is pleased to support the open source community by making MSEC available. * * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the GNU General Public License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may * obtain a copy of the License at * * https://opensource.org/licenses/GPL-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ package msec.org; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import javax.servlet.ServletContext; import javax.servlet.http.HttpServlet; import java.io.*; /** * Created by Administrator on 2016/2/11. * web前端用到了javascript写的tea加密算法,保存在/js/tea.js * 这个类是web后端java的方式来使用tea.js代码来实现tea密码算法 */ public class JsTea { private ScriptEngine engine; //获取web项目里js文件目录所需 //这个变量会在ServletConfig类初始化的时候被初始化一下 static public ServletContext context = null; //构造函数 //找到tea.js文件,并读入ScriptEngin引擎 public JsTea(HttpServlet servlet) { ScriptEngineManager manager = new ScriptEngineManager(); engine = manager.getEngineByName("javascript"); InputStreamReader r = null; //各种情况下,尽量找到tea.js文件 if (context != null) { InputStream in = context.getResourceAsStream("/js/tea.js"); r = new InputStreamReader(in); } else if (servlet != null) { InputStream in = servlet.getServletContext().getResourceAsStream("/js/tea.js"); r = new InputStreamReader(in); } else { File f = new File("/usr/local/tomcat-8/webapps/ROOT/js/tea.js"); try { r = new InputStreamReader(new FileInputStream(f)); }catch (Exception e) {} } //加载到引擎里 try{ engine.eval(r); r.close(); }catch(ScriptException e){ e.printStackTrace(); } catch ( Exception e ) { e.printStackTrace(); } } //执行js代码s,并将结果保存在Object里 public Object eval(String s) { try { return engine.eval(s); } catch (ScriptException e) { e.printStackTrace(); return e; } } //加密 public String encrypt(String plainText, String key) { String s = String.format("encrypt('%s', '%s');", plainText, key); try { return engine.eval(s).toString(); } catch (ScriptException e) { return ""; } } //解密 public String decrypt(String cipherText,String key) { String s = String.format("decrypt('%s', '%s');", cipherText, key); try { return engine.eval(s).toString(); } catch (ScriptException e) { return ""; } } }