BouncyCastle
을 사용하여 데이터에 서명하고 봉투하는 응용 프로그램을 작성하고 있습니다.CMSSignedDataStreamGenerator 해시가 일치하지 않습니다.
대용량 파일에 서명해야하므로 CMSSignedDataGenerator
(작은 파일에도 잘 적용됨) 대신 CMSSignedDataStreamGenerator
을 사용했습니다. 서명 된 파일이 생성되고 있지만 SHA1
해시가 원본 파일과 일치하지 않습니다. 당신이 나를 도울 수?
Here`s 코드 :
try {
int buff = 16384;
byte[] buffer = new byte[buff];
int unitsize = 0;
long read = 0;
long offset = file.length();
FileInputStream is = new FileInputStream(file);
FileOutputStream bOut = new FileOutputStream("teste.p7s");
Certificate cert = keyStore.getCertificate(alias);
PrivateKey key = (PrivateKey) keyStore.getKey(alias, null);
Certificate[] chain = keyStore.getCertificateChain(alias);
CertStore certStore = CertStore.getInstance("Collection",new CollectionCertStoreParameters(Arrays.asList(chain)));
CMSSignedDataStreamGenerator gen = new CMSSignedDataStreamGenerator();
gen.addSigner(key, (X509Certificate) cert, CMSSignedDataGenerator.DIGEST_SHA1, "SunPKCS11-iKey2032");
gen.addCertificatesAndCRLs(certStore);
OutputStream sigOut = gen.open(bOut,true);
while (read < offset) {
unitsize = (int) (((offset - read) >= buff) ? buff : (offset - read));
is.read(buffer, 0, unitsize);
sigOut.write(buffer);
read += unitsize;
}
sigOut.close();
bOut.close();
is.close();
나는 내가 잘못 알고하지 않습니다.
가 작동하는 것 같다. 나는 그것이 마지막 버퍼 반복에서 0이나 null을 처리하고 있다고 생각한다. 그것을 고칠 수있는 다른 방법이 있습니까? – Paulo