http协议 使用httpserver组件完成server(服务端)接受post请求数据并使用3DES+base64加解密希望对大家有帮助
2016-06-23 09:13
731 查看
http协议 使用httpserver组件完成server(服务端)接受post请求数据并使用3DES+base64加解密希望对大家有帮助
http协议 使用httpserver组件完成server(服务端)接受post请求数据并使用3DES+base64加解密希望对大重点内容家有帮助这里写代码片 /** *刚刚接触3DES+base64加解密传输数据网上收罗了一些代码加上项目经理的指点终于写出了一个server端 / package com.caitong.httpserver; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.util.Iterator; import java.util.List; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.IOUtils; import org.apache.http.HttpRequest; import com.caitong.httpserver.util.Encrypt; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; //http协议 server端 public class HttpServerTest { //主线程 public static void main(String[] args) { try { //允许最大连接数 int maxLog = 10; //绑定的端口 HttpServer httpServer = HttpServer.create(new InetSocketAddress("192.168.20.205", 8888), maxLog);//"192.168.20.205"这是你要监听的ip地址 //直接返回Hello..... httpServer.createContext("/demo1", new DemoA()); //显示已经处理的请求数,采用线程池 httpServer.setExecutor(null); httpServer.start(); System.out.println("HttpServer启动...!"); } catch (Exception e) { e.printStackTrace(); } } //获取请求数据并响应回去(实现HttpHandler类来处理请求过来的数据) public static class DemoA implements HttpHandler{ private final byte[] keybyte="1A1FBDD13082FF4722F12783".getBytes();//这是3DES解密需要的密钥 public void handle(HttpExchange exchange) throws IOException {//HttpExchange是用来处理请求和相应数据的类 //System.out.println("ddd"); InputStream in = exchange.getRequestBody(); //获得输入流 BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf-8")); //将BufferedReader转化为字符串 String text = IOUtils.toString(reader); //转码解密 String tt = Encrypt.DataDecrypt(keybyte, text);//Encrypt是写好的工具类(里面有定义好的base64转码和3DES解密的方法) exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, tt.getBytes().length); OutputStream out = exchange.getResponseBody(); //获得输出流 out.write(tt.getBytes()); out.flush(); exchange.close(); //exchange一定要关闭 } } } ---------- package com.caitong.httpserver.util; import java.io.IOException b398 ; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * 加密解密工具类(是3DES+base64工具的集成类) * @author Juny965174016 * @version 20160623 */ public class Encrypt { private static final Log log = LogFactory.getLog(Encrypt.class); /*** * 加密密钥 */ private final byte[] keybyte="1A1FBDD13082FF4722F12783".getBytes(); //keybyte为加密密钥,长度为24字节 /** * 加密方法提供3des加密,并且base64编码 * @param key 24字节的密钥 * @param str 明文 * @return */ public static String DataEncrypt(byte[] key, String str ) { String encrypt = null; try { byte[] ret = ThreeDes.encryptMode(key,str.getBytes("UTF-8")); encrypt = new String(Base64Util.encode(ret)); } catch (Exception e) { System.out.print(e); encrypt = str; } return encrypt; } /*** * 解密方法,先转码base64,再给3des解密 * @param key 24字节的密钥 * @param str 密文 * @return */ public static String DataDecrypt(byte[] key,String str ) { String decrypt = null; try { byte[] ret = ThreeDes.decryptMode( key,Base64Util.decode(str)); decrypt = new String(ret, "UTF-8"); } catch (Exception e) { System.out.print(e); decrypt = str; } return decrypt; } } ---------- package com.caitong.httpserver.util; import java.security.*; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; /** *3DES工具 * 字符串 DESede(3DES) 加密 * @author Juny965174016 * @version 20160623 */ public class ThreeDes { private static final String Algorithm = "DESede"; // 定义 加密算法,可用 // keybyte为加密密钥,长度为24字节 // src为被加密的数据缓冲区(源) public static byte[] encryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 加密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } // keybyte为加密密钥,长度为24字节 // src为加密后的缓冲区 public static byte[] decryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 解密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } } ---------- package com.caitong.httpserver.util; /** *base64工具 * base64编码工具类 * @author Juny965174016 * @version 20160623 */ public class Base64Util { /** * 将 s 进行 BASE64 编码 * @param s * @return */ public static String encode(byte[] s) { if (s == null) return null; return (new sun.misc.BASE64Encoder()).encode(s); } /** * 将 s 进行 BASE64 编码 * @param s * @return */ public static String encode(String s) { if (s == null) return null; return encode(s.getBytes()); } /**将 BASE64 编码的字符串 s 进行解码 * * @param s * @return */ public static byte[] decode(String s) { if (s == null) return null; sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder(); try { byte[] b = decoder.decodeBuffer(s); return b; } catch (Exception e) { return null; } } }
相关文章推荐
- android6.23Http协议
- ftpClient ,httpClient
- httpServer端接受post请求数据并使用3DES+base64加解密
- http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤
- linux网络编程----->高并发--->poll多路I/O转接服务器
- http请求数据的格式
- 网络时代教你外贸电子商务网站在海外推广的五大方法
- Java基础--Socket网络编程
- 检测Gps和网络定位权限
- 基于weka实现的神经网络算法实现
- 70行代码实现的神经网络算法
- 保障网络安全,iOS应用年底前必须启用ATS安全功能
- HTTP协议
- linux 的网络设置
- linux 的网络设置
- 使用Http协议访问网络--HttpURLConnection
- TCP/UDP Socket编程步骤
- 网络状态检查
- Android(四)----网络编程
- HTTP 随笔