RSA加密Socket传输文件、签名(三)

本文介绍了一个使用RSA加密算法实现的安全文件传输客户端。该客户端能够配置服务器地址、端口及密钥,并通过多线程方式同时向服务器传输多个文件。

接下来是客户端类CoderClient的编写。

1.首先配置如下信息,包括服务器地址、端口、密钥文件位置.

conf.properties

#configure private key on server rsa_private=d:/rsa1_private.key #public key from client rsa_public=d:/rsa_public.key #server server=127.0.0.1 #server port port=888

2.编写发送文件的方法,其中byte[] buf=new byte[117]的原因是RSA加密算法支持的最大字节数为117,而加密后变成128位,所以服务器端解密的时候可以使用128bytes的buf读取文件。

public boolean send(String filename){ try { File f = new File(filename); fis = new FileInputStream(filename); byte[] buf = new byte[117]; int available; socket = new Socket(server,port); os = socket.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeUTF(f.getName()); //写入文件名 dos.writeLong(f.length()); //写入文件大小 while((available = fis.read(buf)) != -1){ byte[] availableBytes = null; if(available == buf.length){ availableBytes = buf; }else{ availableBytes = new byte[available]; for (int i = 0; i < available; i++) { availableBytes[i] = (byte) buf[i]; } } byte[] cipherText = coder.encrypt(availableBytes); byte[] signature = sign.getSignature(cipherText); os.write(signature); os.write(cipherText); //count += cipherText.length; //System.out.println("send "+count+" bytes"); } socket.shutdownOutput(); fis.close(); return true; } catch (FileNotFoundException e) { log.error("文件"+filename+" 未找到"); } catch (UnknownHostException e) { log.error("未知主机:"+server); } catch (IOException e) { log.error("文件读/写错误,可能是因为远程主机无响应"); } return false; }

3.为了测试多线程处理效果,可以将客户端继承于Thread,在重写的run方法中调用 send(String file)方法

@Override public void run() { send(this.file); }

4.main中的测试可以这样来模拟多个客户端同时向服务器传输文件

File dir = new File("E://files//demo//"); File[] files = dir.listFiles(); for(int i=0; i<files.length; i++){ Thread th = new Thread(new CoderClient(files[i].getAbsolutePath())); th.start(); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值