2017-12-26 29 views
0

pkcs # 7 및 bouncycastle을 사용하여 텍스트 및 zip 파일에 서명하고 확인하는 프로그램이 있습니다. 로그인 한 후 완벽하게 내 텍스트 파일을 확인할 수pkcs # 7 및 bouncyCastle in java를 사용하여 zip 파일에 서명 할 수 없습니다.

String finalmsg="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n" + 
        "<Envelope>\n" +" <OrgContent>"+new String(Base64.encode(contentbytes))+"</OrgContent>\n"+" <Signature>"+new String(Base64.encode(signedBytes))+"</Signature>\n"+" <Certificate>"+ 
        new String(Base64.encode(keyStore.getCertificate("CertName").getEncoded()))+"</Certificate>\n"+"</Envelope>"; 

암 : (원본 데이터, SignedBytes 및 인증서 데이터를 base64로 인코딩을 포함) 텍스트 및 우편 파일 모두에 다음 문자열을 쓰고 있어요.

if(file.getName().contains(".zip")) { 
byte[] b = finalmsg.getBytes(StandardCharsets.UTF_8); 
try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(address+"SIGVERFILES/s2/"+name), 4096)) { 
    out.write(b); 
} 
} else { 
    FileWriter fw = new FileWriter(address+"SIGVERFILES/s2/"+name,true); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write(finalmsg); 
    bw.close(); 
} 
: 또한 내 zip 파일을 확인할 수 있어요하지만 zip 파일을 추출 할 수 없습니다 나는 코드가 파일로 내 서명 된 메시지를 작성하는 사용하고있다 아래

(zip 파일 오류의 예기치 않은 끝을 얻고있다)

다른 사용자가 서명 한 zip 파일도 성공적으로 확인하고 압축을 풀 수 있습니다. 그래서 내 인증 코드는 괜찮습니다. Zip 파일을 쓰는 방법에 문제가 있다고 생각합니다. 들여 쓰기를 신경 쓰지 마시고 제가 여기서 뭘 잘못하고 있는지 알아 보도록 도와주십시오.

더 이상 코드 스 니펫이 필요한지 알려주세요.

답변

0

XML 문자열을 파일에 쓰고 "whatever.zip"으로 이름을 바꿀 수없고 결과가 유효한 zip 파일이 될 것으로 기대하십시오. Zip은 자체 제약 조건을 가진 이진 파일 형식이며, 그 중 하나는 파일의 시작 부분에 "PK"로 시작하는 마법 번호입니다.

부호가있는 데이터 교환에도 자체 제한이 있으며 PKCS#7 SignedData도 정규화 된 형식입니다.

BouncyCastle은 올바른 랩핑 된 서명 된 데이터를 생성하기위한 도우미 클래스를 제공합니다. 그들의 문서 및 예제를 확인하십시오 herehere.

첨부 된 시그니처 생성 : 서명이 첨부 된 ASN.1 구조에는 서명 된 메시지가 포함되어 있으므로 서명의 유효성을 읽고 동일한 데이터 블록에서 페이로드를 읽을 수 있습니다 (예 : RSA 인증서). 분리 된 서명을 사용하면 데이터와 서명을 별도로 전송할 수 있습니다 (단, 수신자는 서명을 확인하기 위해 둘 다 필요합니다. 예 : 공개 FTP 서버에서 다운로드 할 수있는 서명 파일). 일반적으로 질문은 단순히 수신자가 서명을 확인하지 않고 페이로드를 사용할지 여부를 묻는 것으로 응답됩니다.