Java의 CipherInputStream에 래핑하는 동안 ObjectInputStream의 java.io.StreamCorruptedException

gg_14

소켓 (단일 클라이언트 단일 서버)을 통해 암호화 된 개체를 보내고 있습니다. 클라이언트는 암호화 된 개체를 봉인 된 개체로 보내고 서버는 개체를 해독합니다. 그러나 서버 측에서 ObjectInputStream을 생성하는 동안 StreamCorruptedException이 발생합니다. 인터넷에서 많이 검색했는데 내 코드는 괜찮아 보이지만 예외가 발생하는 이유를 모르겠습니다.

다음은 Client 클래스입니다.

package sample;

import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.crypto.SealedObject;
import javax.crypto.spec.SecretKeySpec;
import java.io.ObjectOutputStream;
import java.net.Socket;

public class Client {
    private static Socket socket;
    public static void main(String args[]) throws Exception {
        socket=new Socket("127.0.0.1",7777);
        Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");
        SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".getBytes(), "AES");
        cipher.init(Cipher.ENCRYPT_MODE, sks);
        CipherOutputStream cos=new CipherOutputStream(socket.getOutputStream(),cipher);
        ObjectOutputStream oos=new ObjectOutputStream(cos);
        oos.flush();
        SealedObject sealedObject=new SealedObject("SampleString",cipher);
        oos.writeObject(sealedObject);
    }
}

내 서버 클래스는 다음과 같습니다.

package sample;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.SealedObject;
import javax.crypto.spec.SecretKeySpec;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private static ServerSocket serverSocket;
    public static SecretKeySpec sks;
    public static void main(String args[]) throws Exception{
        serverSocket=new ServerSocket(7777);
        Socket clientSocket=serverSocket.accept();
        Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");
        sks = new SecretKeySpec("MyDifficultPassw".getBytes(), "AES");
        cipher.init(Cipher.DECRYPT_MODE, sks);
        CipherInputStream cis=new CipherInputStream(clientSocket.getInputStream(),cipher);
        ObjectInputStream ois=new ObjectInputStream(cis); //line 23
        SealedObject so=(SealedObject) ois.readObject();
        System.out.println((String)so.getObject(cipher));
    }
}

클라이언트가 연결되면 서버 측에서 다음 예외가 발생합니다.

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 73720019
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:857)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:349)
at sample.Server.main(Server.java:23)
user207421

문제는 이중 암호화입니다. 출력 케이스의 Cipher는 객체를 봉인 한 다음 스트림을 암호화해야하지만 입력 케이스의 Cipher 객체는 스트림을 해독 한 다음 객체의 봉인을 해제해야합니다. 이는 반대 순서입니다.

SealedObject또는 암호 스트림을 제거하십시오 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Java의 StreamCorruptedException

java.io.StreamCorruptedException : invalid type code : AC를받지 않고 ObjectInputStream에 추가하는 방법

ObjectInputStream java.io.StreamCorruptedException : 잘못된 형식 : 0 롤리팝 및 마쉬 말로

Java에서 바이트 배열을 구문 분석하는 동안 StreamCorruptedException이 발생했습니다.

Java에서 바이트 배열을 구문 분석하는 동안 StreamCorruptedException이 발생했습니다.

java.io.StreamCorruptedException : 유효하지 않은 유형 코드 : 04

java.io.StreamCorruptedException : 유효하지 않은 스트림 헤더 : EFBFBDEF

java.io.StreamCorruptedException : 유효하지 않은 스트림 헤더 : 54657374

java.io.StreamCorruptedException: invalid internal transport message format

JavaRDD를 매핑하는 동안 java.io.NotSerializableException 받기

java.io.StreamCorruptedException : 유효하지 않은 스트림 헤더 : 7371007E

Serialization : java.io.StreamCorruptedException : 유효하지 않은 스트림 헤더 : 0AACED00

java.io.FileNotFoundException : REST 서비스에 액세스하는 동안

jenkins에서 코드를 실행하는 동안 java.io.FileNotFoundException

Java의 비동기 IO?

클래스 B의 클래스 A 필드에 액세스하는 동안 Java 동기화 된 블록

CSS의 클래스 이름 안에 요소를 래핑하는 동안 오류가 발생합니다.

MS Access에 액세스하는 동안 Mathematica의 Java 예외

Google API에 액세스하는 동안 Java의 JSON 오류

finally 블록에서 반환하는 동안 Java의 이상한 동작

Java 생성자에 대해 배우는 동안의 문제

jaxb를 사용하여 동일한 Java 클래스 objetc에 동일한 요소를 포함하는 다른 유형의 요소를 매핑하는 방법

Java에서 다른 클래스의 정적 멤버에 액세스하는 동안 코드 중복 방지

JSONArray의 내용을 주어진 클래스에 매핑하는 Java 함수?

Java에서 객체를 선언하는 동안 (클래스 이름)은 무엇을 의미합니까?-Android

Java 메소드에서 클래스의 일부를 호출하는 동안 오류가 발생했습니다.

외래 키를 사용하는 동안 SQLAlchemy의 매핑 오류

java에서 동일한 클래스의 메소드에 매개 변수와 동일한 클래스의 객체를 전달하는 것이 안전합니까?

여러 행의 R에서 웹 스크래핑 중 누락 된 행-인도의 NSE 인덱스에서 스크래핑하는 동안

TOP 리스트

뜨겁다태그

보관