http带参数加密访问

news/2024/10/18 0:32:56/

有时候我们做项目需要用到HTTP传参,但是带着的参数在比较敏感的情况下我们是希望密文传输的。下面是代码展示:

客户端代码(核心部分):

//需要加密传递的参数
String param = "usercode=" + userName + "&password=" + passWord;
//对param进行加密处理
String spParams = null;
try {//加密,“bbbbb”是参数在服务端解密的密钥spParams = ThreeDES.crypt(param, "bbbbb",1);}catch(Exception e){e.printStackTrace();
}
//进行url转码,避免服务端无法解密。因为参数加密之后会产生一些特殊字符,
//如果不进行url转码的话,在服务端进行解密很可能失败。
String sp = java.net.URLEncoder.encode(spParams, "UTF8");

ThreeDES类代码:

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.Key;
import java.security.SecureRandom;public class ThreeDES {public static String crypt(String content,String password,int i){try {KeyGenerator generator = KeyGenerator.getInstance("AES");SecureRandom random = SecureRandom.getInstance("SHA1PRNG");random.setSeed(password.getBytes());generator.init(random);// generator.init(new SecureRandom(password.getBytes()));Key key = generator.generateKey();generator = null;if(i == 1){return getEncString(content,key);}else if(i == 2){return getDesString(content,key);}} catch (Exception e) {return null;}return null;}/*** 加密String明文输入,String密文输出** @param strMing* @return*/private static String getEncString(String strMing,Key key) {byte[] byteMi = null;byte[] byteMing = null;String strMi = "";BASE64Encoder base64en = new BASE64Encoder();try {byteMing = strMing.getBytes("UTF8");byteMi = getEncCode(byteMing,key);strMi = base64en.encode(byteMi);} catch (Exception e) {e.printStackTrace();} finally {base64en = null;byteMing = null;byteMi = null;}return strMi;}/*** 解密 以String密文输入,String明文输出** @param strMi* @return*/private static String getDesString(String strMi, Key key) {BASE64Decoder base64De = new BASE64Decoder();byte[] byteMing = null;byte[] byteMi = null;String strMing = "";try {byteMi = base64De.decodeBuffer(strMi);byteMing = getDesCode(byteMi,key);strMing = new String(byteMing, "UTF8");} catch (Exception e) {e.printStackTrace();} finally {base64De = null;byteMing = null;byteMi = null;}return strMing;}/*** 加密以byte[]明文输入,byte[]密文输出** @param byteS* @return*/private static byte[] getEncCode(byte[] byteS,Key key) {byte[] byteFina = null;Cipher cipher;try {cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, key);byteFina = cipher.doFinal(byteS);} catch (Exception e) {e.printStackTrace();} finally {cipher = null;}return byteFina;}/*** 解密以byte[]密文输入,以byte[]明文输出** @param byteD* @return*/private static byte[] getDesCode(byte[] byteD,Key key) {Cipher cipher;byte[] byteFina = null;try {cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, key);byteFina = cipher.doFinal(byteD);} catch (Exception e) {e.printStackTrace();} finally {cipher = null;}return byteFina;}public static void main(String[] args) {//  System.out.println(ThreeDES.crypt("bindMobile=13023130171&fenjihao=107", "bbbbb", 1));System.out.println(ThreeDES.crypt("e8fxu2q12DlkgwZHsi9OIZllSF05pGp5svbSEwAh4Gto/tleBleSuKq66Zu5QvVsoteasn0qXvIm\n" +"574UEeXpMmHXO51gzq3ut4LvV4YfYeNZJ07Yh+LYhi39J/FB15Cs8W1iru4V/0MlZqpOsMwuoQg3\n" +"kSkg0BF486q5BMkcsD0=", "bbbbb", 2));}
}

服务端接收参数进行解密(核心代码):

String sp = ServletActionContext.getRequest().getParameter("sp");
String singlePointLoginParams = ThreeDES.crypt(sp, "bbbbb",2); //解密

至此,http带参数加密传输功能结束。
注:首先需要说明的是客户端我是单独开发的一个springboot项目进行参数加密传输,服务端是一个SSH项目(比较老旧的技术)进行响应解密的。不过这都不重要,重要的是实现了,亲测可行(不管是在windows还是linux上面)。在弄这个的过程中我是有踩过坑的,这个坑就是在windows上面没问题,但是部署在linux上面就不行了,原因在于下面这段代码(获取key的值):

KeyGenerator generator = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(password.getBytes());
generator.init(random);
Key key = generator.generateKey();

因为在windows上默认加密解密所获得的key是一样的,所以可以成功。但是linux上则是不一样。上面的代码则是可以让加密解密所产生的key值一样,这样就可以解决问题了。


http://www.ppmy.cn/news/478913.html

相关文章

CS 188 Project3(RL) Q5: Prioritized Sweeping Value Iteration

现在您将实现PrioritedSweepingValueIterationAgent,它已在ValueIterationAgents.py中为您部分指定。注意,这个类是从AsynchronousValueIterationAgent派生的,所以唯一需要更改的方法是RunValueIteration,它实际上运行值迭代。优先以可能改变策略的方式集中更新状态值。 对…

布林通道参数用20还是26_期货boll参数20还是26好,期货的布林线设置成什么参数好...

Q1:期货的布林线设置成什么参数好 期货一般设26 ,股票20. Q2:期货布林带的参数怎么设置合适? 一般初始默认设置是22,但是我自己习惯用26这个参数 Q3:问大家布林带的参数设置 26 2还是20 2 5910的多单一直拿着 今晚看下能够平了去不 Q4:股市的布林线是20天的好用还是26天…

idea中的VM参数调优

以下是自己使用的ideaVM参数调优,记录以下,以后直接复制使用,有需要的自己copy -Xms2g -Xmx4g -Xmn576m -XX:AlwaysPreTouch -XX:MetaspaceSize256m -XX:MaxMetaspaceSize768m -XX:ReservedCodeCacheSize240m-server -Xms1024m -Xmx2048m -…

百度url 参数详解全

百度url解析Joe.Smith整理大全 百度url解析Joe.Smith整理大全...1 本文链接:http://blog.csdn.net/qq_26816591/article/details/53335987#t23 所给出的 参考百度rul: https://www.baidu.com/s?ieutf-8&f8&rsv_bp1&rsv_idx2&tnbaiduhome_pg&am…

百度搜索url参数详解

http://www.baidu.com/s?wd关键字 wd(Keyword):查询的关键词; http://www.baidu.com/s?wd关键字&cl3 cl(Class):搜索类型,cl3为网页搜索,cl2为图片搜索; http://video.baidu.com/v?rn20&pn0 pn(…

百度搜索URL参数

http://www.baidu.com/s?wd关键字 wd(Keyword):查询的关键词; http://www.baidu.com/s?wd关键字&cl3 cl(Class):搜索类型,cl3为网页搜索,cl2为图片搜索; http://video.baidu.com/v?rn20&pn0 …

双线macd指标参数最佳设置_macd线参数如何设置最佳买点,MACD指标的参数设置,MACD参数设置多少最佳...

Q1:MACD指标的参数设置,MACD参数设置多少最佳 DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); MACD:(DIF-DEA)*2; 一般情况下不需要修改参数,如需修改,还要靠自己长期摸索找出适合自己的操作习惯。 Q2:MACD指标的短…

android 百度移动搜索 url 参数,百度刷站内快排算法参数-百度搜索URL参数比较详解...

【假如您搜索到此页面必然要打开】或者对你有辅佐,相信你必然在研究百度快速排名算法-刷点击,发包,线程,站内刷等等,下面是百度最新的参数,对快排或者有些辅佐。 新增参数(移动端) word=代表手机移动搜索,wd=代表电脑PC搜索 sa=ib(首页) sa=tb(上方搜索输入框) sa=np(内…