序列化对象,作为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....");//签名无效
}
}
}
相关推荐
在给定的"文件传送代码"压缩包中,可能包含了服务器端和客户端的Java代码示例,这些示例可以帮助初学者理解如何使用Socket进行文件传输。通过阅读和运行这些代码,你可以更深入地了解Socket编程的实际应用。 总的来...
RSA文件加密传送是一种在互联网上安全传输数据的方法,它结合了Java编程语言、TCP和UDP协议,以及RSA公钥加密算法。在这个系统中,RSA用于确保数据在传输过程中的安全性,而TCP和UDP则提供了网络通信的基础。 首先...
本篇文章将详细讲解如何利用Qt的socket功能进行文件传输,以"Qt socket传送文件"为主题,结合提供的标签"Qt socket",我们将探讨Qt中的网络编程及其在Windows CE(Wince)环境下运行的实现方法。 首先,Qt的网络...
"服务端与客户端通过socket传送图像"这个主题聚焦于如何利用Socket编程技术在VC++环境下实现实时的图像数据传输。Socket是一种在不同计算机之间建立连接、交换数据的基础组件,它为应用程序提供了底层的网络通信接口...
本项目"Android_Socket_客户端和服务器端,支持多张图片同时传送,自定义协议头"着重解决了如何通过Socket实现在Android设备上进行图片的高效传输,并且通过自定义协议头来增强数据传输的安全性和可靠性。...
11. **安全性**:在实际应用中,应考虑数据加密和安全传输,如使用SSL/TLS协议保护数据不被窃取或篡改。 通过以上知识点,我们可以构建一个能够在Windows下传输大文件的Socket程序。然而,为了提高性能和可靠性,...
5. **安全性**:对于敏感文件,可能需要使用SSL/TLS等加密协议进行安全传输,防止数据被窃取或篡改。 6. **流控制和拥塞控制**:TCP协议本身提供了流控制和拥塞控制机制,但实际应用中可能需要根据网络状况进行适当...
- **安全性**:考虑使用SSL/TLS加密传输,保护文件内容不被窃取。 6. **示例代码** 这里给出一个简单的文件传输概念代码: ```java // 客户端 FileInputStream fis = new FileInputStream(file); ...
利用DataOutputStream和DataInputStream实现由android客户端利用Socket向java服务器不间断传输图片,很好用。之间试过由OutpuStream.write(byte[])以及先将图片byte[]通过Base64加密转换为String再发送,效果都不好...
在Java编程中,我们可以通过java.net.Socket和java.net.DatagramSocket类来实现UDP协议的通信。这个项目是关于使用UDP协议进行对等通讯,并结合RSA加密算法来保证数据的安全性。以下将详细介绍该实现的关键知识点: ...
- 考虑使用SSL/TLS等加密技术,以保护数据在传输过程中的安全性。 - 对文件名和大小进行验证,防止恶意文件的传输。 6. **性能优化**: - 调整传输块的大小以平衡带宽利用率和CPU负载。 - 使用异步I/O或者事件...
在实际开发中,这种通信模式可以扩展到更复杂的场景,例如添加错误处理、安全措施(如SSL/TLS加密)、性能优化(如多线程、异步I/O)等。同时,理解并熟练掌握这些基础知识对于成为一名专业的Linux系统开发者至关...
最后,对于文件传输的安全性,可以考虑使用SSL/TLS协议进行加密,防止数据在传输过程中被窃取。同时,为防止非法连接,可以设置权限验证机制,例如用户名和密码认证。 总结起来,通过socket编程在VC6.0环境下实现...
本压缩包"socket_to_file_tranlation.tar.gz_传送文件"提供了一个简单的命令行工具,利用Socket技术实现在两台计算机间传输文件。下面我们将深入探讨Socket编程以及如何用于文件传输。 Socket,通常称为套接字,是...
考虑到网络安全,可以使用SSL/TLS对TCP连接进行加密,防止数据在传输过程中被窃取。C#的SslStream类提供了这样的功能。 8. **性能优化**: 可以通过多线程或异步操作提高文件传输效率。例如,使用异步的BeginSend...
"网络游戏-网络上传送数据的加密和解密的系统、装置和方法"这个主题聚焦于如何保护玩家的信息安全以及游戏的公平性,防止数据被非法窃取或篡改。以下是关于网络游戏中的数据加密和解密技术的详细解释: 1. **数据...
7. **具体实现**:压缩包中的"linux下用socket进行文件传送"可能是包含服务器端和客户端的C语言源代码,演示了如何构建上述过程。这些代码可能包括文件读写、Socket操作、错误处理和数据校验等部分。 在实际应用中...
在本文中,我们将深入探讨如何使用VC++ MFC框架实现一个具有密文传送功能的聊天软件。MFC(Microsoft Foundation Classes)是微软提供的一套面向对象的类库,用于简化Windows应用程序开发。在这个项目中,我们将重点...
在TCP/IP网络中,Socket的连接由两部分组成:机器的IP地址和程序使用的端口号,这确保了数据能够准确地从一个程序传送到另一个程序。 Socket编程的机制可以比喻为一个管道,数据从一端(发送方)投入,可以从另一端...