`
thunderwap
  • 浏览: 9603 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

socket 加密传送

阅读更多

序列化对象,作为socket传送内容,为了确保安全,增加公匙:

package serialver.entity;

import java.io.Serializable;
import java.security.PublicKey;

/**
 *  @ version 创建时间:2014-3-21 下午04:46:42
 *
 *  @ author  leicl   
 *
 *  类说明:
 *
 */
public class EncriptEntity implements Serializable{
 /**
  * 根据对象结构自动生成的
  */
 private static final long serialVersionUID = 910786463864347205L;
 byte[] data;
 byte[] sign;
 PublicKey key;
 
 public EncriptEntity(byte[] data, byte[] sign, PublicKey key) {
  super();
  this.data = data;
  this.sign = sign;
  this.key = key;
 }

 public PublicKey getKey() {
  return key;
 }

 public byte[] getData() {
  return data;
 }

 public byte[] getSign() {
  return sign;
 }
 
 
}
加密工具类:

package serialver.util;

import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;

/**
 *  @ version 创建时间:2014-3-21 下午04:18:21
 *
 *  @ author  leicl   
 *
 *  类说明:
 *
 */
public class DataSign {
 
 public static KeyPair encryptionData() throws NoSuchAlgorithmException, InvalidKeyException{
  KeyPairGenerator gen = KeyPairGenerator.getInstance("DSA");
  gen.initialize(1024, new SecureRandom());
  KeyPair kayPair = gen.generateKeyPair();
  System.out.println("正在生成密匙......");
  
  return kayPair;
 }

}
客户端程序:

package serialver.client;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;

import serialver.entity.EncriptEntity;
import serialver.util.DataSign;

/**
 *  @ version 创建时间:2014-3-21 下午04:41:28
 *
 *  @ author  leicl   
 *
 *  类说明:
 *
 */
public class EncripClient {
 
 public static void main(String[] args) throws UnknownHostException, IOException, InvalidKeyException, NoSuchAlgorithmException, SignatureException {
  Socket s = new Socket(InetAddress.getLocalHost(), 2323);
  
  ObjectOutput os = new ObjectOutputStream(s.getOutputStream());
  
  FileInputStream fi = new FileInputStream("f:\\apllication.policy");
  byte[] b = new byte[fi.available()];
  fi.read(b);
  KeyPair kayPair = DataSign.encryptionData();
  Signature sign = Signature.getInstance("SHA/DSA");
  
  PrivateKey private1 = kayPair.getPrivate();
  PublicKey public1 = kayPair.getPublic();
  
  sign.initSign(private1);
  sign.update(b);
  
  EncriptEntity en = new EncriptEntity(b, sign.sign(), public1);
  os.writeObject(en);
 }

}
服务器端程序:

package serialver.entity;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.SignatureException;

/**
 *  @ version 创建时间:2014-3-21 下午04:58:23
 *
 *  @ author  leicl   
 *
 *  类说明:
 *
 */
public class EncripServer {
 
 public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {
  ServerSocket ser = new ServerSocket(2323);
  
  Socket accept = ser.accept();
  ObjectInput is = new ObjectInputStream(accept.getInputStream());
  
  EncriptEntity en =  (EncriptEntity) is.readObject();
  
  Signature sign = Signature.getInstance("SHA/DSA");
  
  sign.initVerify(en.getKey());
  sign.update(en.getData());
  
  boolean verify = sign.verify(en.getSign());
  if(verify){
   System.out.println("sign is valid....");//说明签名有效
  }else{
   System.out.println("sign is not valid....");//签名无效
  }
 }

}

0
0
分享到:
评论
1 楼 thunderwap 2014-03-21  
自己研究的成果,避免一些只是说是这样那样,但是实际上没多大作用。
一句话,还是要自己亲身实践。

相关推荐

    android客户端用socket不间断传输图片

    利用DataOutputStream和DataInputStream实现由android客户端利用Socket向java服务器不间断传输图片,很好用。之间试过由OutpuStream.write(byte[])以及先将图片byte[]通过Base64加密转换为String再发送,效果都不好...

    Java实现RSA加密解密,数字证书生成与验证(有搭Socket)

    AB双方通信,A把需要传输的文件MD5值用自己的私钥生成数字签名,连同明文用B的公钥加密后传送给B,B用私钥解密验证数字签名,并计算明文MD5值跟密文的MD5值比较

    c++socket_server_client

    此乃windows下vs2013开发项目,有服务端与客户端demo,类似qq群聊天功能,另外服务端添加了消息推送。所有客户端可接收。可拓展,可将文件转2进制流传送,可加加密类函数。等等。

    Windows下纯C语言Socket、smtp发送邮件,支持附件

    4、邮件正文和附件的数据传送方式,均为base64 5、自动解析发件箱的SMTP服务器 压缩包文件简介: base.c:包含一些基本的函数,其中有一些在此程序中并未用到,只要使用了其中的base64加密算法 mail.c:包含邮件...

    C语言socket/smtp发送邮件,支持附件,支持windows和linux

    /* * 使用规则: * 可以发送带附件的邮件,附件大小限制...* 邮件正文和附件的数据传送方式,均为base64 * 自动解析发件箱的SMTP服务器 */ 支持windows系统,linux系统。 上一版本的更新版。 详细情况件压缩包的readme

    基于JAVA的安全报文系统设计

    随着计算机应用的广泛普及和现代网络...最后,通过模拟生成数字证书,实现对基于数字签名的文档的加密传送,很大地提高了传输过程中的安全性,从而使用户使用该系统传输的安全性得到有效保障,整个仿真系统具有跨平台性。

    java socket超精美仿qq通信软件(mysql)

    此系统基于Java技术,接入MySQL数据库,采用异步处理的方式。该系统面向每位用户提供网上注册、登录、好友搜索添加、即时聊天、传输文件、实时语音等一系列功能,是网络...协议加密:在发送前,对通信协议进行加密。

    SSL工作原理详解说明

    SSL是Security Socket Layer的缩写,技术上称为安全套接字,可以简称为加密通讯协议。  当选择“SSL安全登录”后登录网站,用户名和密码会首先加密,然后通过SSL连接在 Internet 上传送,没有人能够读取或访问到您...

    SSL工作原理详解

    SSL是Security Socket Layer的缩写,技术上称为安全套接字,可以简称为加密通讯协议。  当选择“SSL安全登录”后登录网站,用户名和密码会首先加密,然后通过SSL连接在 Internet 上传送,没有人能够读取或访问到您...

    C语言smpt socket邮件发送,支持附件(最新版)

    /* * 使用规则: * 可以发送带附件的邮件,附件大小限制由发送方服务器而定,暂...* 邮件正文和附件的数据传送方式,均为base64 * 自动解析发件箱的SMTP服务器 */ 支持windows、linux两种操作系统 详见压缩包内的readme

    windows服务端+多客户端socket tcp通信

    此乃windows下vs2013开发项目,有服务端与客户端demo,类似qq群聊天功能,另外服务端添加了消息推送。所有客户端可接收。可拓展,可将文件转2进制流传送,可加加密类函数。等等。

    SSL、TLS协议格式入门学习

    SSL、TLS协议格式入门...TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证,主要用千提高应用程序之间数据的安全性,对传送的数据进行加密 和隐藏,确保数据在传送中不被改变即确保数据的完整性。

    openssl-1.0.0a

    SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。 什么是OpenSSL 众多的密码算法、公钥基础设施标准以及SSL协议,或许这些有趣的功能会让你产生实现所有这些算法和标准的...

    文件互传(自家用),含打包好的apk与jar,含该项目的AndroidStudio与Eclipse源码

    共有:Socket的通信、Base64加密与解密、MD5码验证、分包思想解决大文件传输问题、Toast提醒的应用 个人建议:最好通过源码自行设计最适合自己的操作方式,因为自己制作的东西才是最适合自己的,不用依赖任何人。

    CAT77—WEBIM企业沟通系统

    CAT77—WEBIM企业沟通系统 ...本套程序使用CatWindows+ Cairngorm+SSH+JPA+Socket架构 由于时间关系,聊天记录,视频语音,文件传送尚未完成,可自行修改源代码完善 后台默认管理帐号为:admin 管理密码为:888888

    飞鸽传书(IPMessenger) 源码

    不需要服务器支持, 支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, ...

    Web服务完整实例构建Web通道(Web服务端) 简单、规范、易学、易用

    3.FlashSocket将指令串传送给指定IP地址的指定端口(Web服务端的IP地址及端口)==> 4.Web服务端获取指令串==> 5.Web服务端调用后台解析程序==> 6.解析程序依据指令串进行操作、结果(字符串)回送给Web服务端==>...

    Nodejs+Express创建HTTPS服务器+WS模块创建加密的WS服务

    HTTP: 超文本传输协议 (Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。 HTTPS:(Hypertext Transfer Protocol over Secure ...

    密码传情(中兴捧月比赛作品)

    1.实现客户端服务端基本信息配置 2.实现客户端与服务端的通信 3. 实现用户信息的管理 4. 实现对用户聊天内容...8. 实现混合字符串的传送 9. 实现多行文本信息的发送,文本文件的加密传输 10.实现服务端的消息暂存机制

Global site tag (gtag.js) - Google Analytics