J'écris une application qui signe et enveloppe les données en utilisant BouncyCastle
.Le hachage CMSSignedDataStreamGenerator ne correspond pas
J'ai besoin de signer des fichiers volumineux donc au lieu d'utiliser le CMSSignedDataGenerator
(qui fonctionne très bien pour les petits fichiers) j'ai choisi d'utiliser CMSSignedDataStreamGenerator
. Les fichiers signés sont générés mais le hachage SHA1
ne correspond pas au fichier d'origine. Pourriez-vous m'aider?
Here`s du code:
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();
Je ne sais pas ce que je fais mal.
Réglage tampon 1 semble fonctionner. Je pense qu'il traitait les 0 ou les nulls dans la dernière itération de tampon. Y a-t-il un autre moyen de le réparer? – Paulo