オーディオ/ビデオ ファイルをサーバーに送信し、そこでデータが暗号化され、ソケットでクライアントに送り返されるプログラムを作成しています。クライアント部分では、データが抽出され、復号化されて別のファイルに保存されます。データも暗号化および復号化されますが、復号化されたファイルは正しく再生されません。
誰でも助けることができますか?私のコードは次のとおりです
サーバ:
public class Ser_enc
{
private static int packet_count;
private static int packet_size=1024;
public static void main(String args[]) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException
{
System.out.println("Hi iam server");
ServerSocket ss=new ServerSocket(2001);
Socket s=ss.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));//sockin
OutputStream pw= s.getOutputStream();
String filename=in.readLine();
System.out.println("The file requested is " +filename);
String loc="F://files//source_files//"+filename;
File file=new File(loc);
if(file.exists())
System.out.println("File found");
File to_b_encf =new File("F:/files/source_files//encryped.mp3");
if(!to_b_encf.exists())
to_b_encf.createNewFile();
System.out.println("encrypting");
Cipher encipher = Cipher.getInstance("AES");
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecretKey skey = kgen.generateKey();//initiate key
encipher.init(Cipher.ENCRYPT_MODE, skey);
FileInputStream fsrc=new FileInputStream(loc);
FileOutputStream encfile=new FileOutputStream(to_b_encf);
CipherInputStream cis = new CipherInputStream(fsrc, encipher);
int read;
while((read=cis.read())!=-1)
{
encfile.write(read);
encfile.flush();
}
BufferedInputStream fsrcread=new BufferedInputStream(new FileInputStream(to_b_encf));
packet_count = (int) Math.ceil((to_b_encf.length()/packet_size));
System.out.println("The number of packets to send is :" +packet_count);
for(int i=0;i<=packet_count;i++)
{
byte[] packet=new byte[packet_size];
fsrcread.read(packet, 0, packet_size);
int per=(int)((i*100)/(packet_count));
System.out.println("Transfer " +per +"% done");
pw.write(packet);
pw.flush();
}
s.close();
pw.close();
cis.close();
encfile.close();
}
}
クライアント:
public class Cli_dec
{
private static Socket s;
private static int read;
public static void main(String args[]) throws UnknownHostException, IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException
{
s=new Socket("127.0.0.1",2001);
PrintWriter out=new PrintWriter(s.getOutputStream());
String fname=JOptionPane.showInputDialog(null);
out.write(fname+"\n");
out.flush();
int count;
byte[] buf=new byte[100000];
System.out.println("Receiving packets");
File f=new File("F:/files/source_files//decryped.mp3");
FileOutputStream to_b_decf=new FileOutputStream(f);
BufferedOutputStream bos=new BufferedOutputStream(to_b_decf);
InputStream in1=s.getInputStream();
while((count=in1.read(buf))>0)
{
bos.write(buf, 0,count);
bos.flush();
}
File destfile =new File("F:/files/source_files//original.mp3");
if(!destfile.exists())
destfile.createNewFile();
Cipher decipher = Cipher.getInstance("AES");//initiate a cipher for decryption
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecretKey skey = kgen.generateKey();//initiate key
decipher.init(Cipher.DECRYPT_MODE, skey);//decrypt the file
FileInputStream decf=new FileInputStream(f);
System.out.println("decrypting");
CipherInputStream c_decf=new CipherInputStream(decf,decipher);
FileOutputStream destf=new FileOutputStream(destfile);
CipherOutputStream cout=new CipherOutputStream(destf,decipher);
while((read=c_decf.read())!=-1)
{
cout.write(read);
cout.flush();
}
c_decf.close();
destf.close();
cout.close();
decf.close();
s.close();
}
}