Org.bouncycastle.cms.CMSSignerDigestMismatchException: значение атрибута message-digest не соответствует расчетному значJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Org.bouncycastle.cms.CMSSignerDigestMismatchException: значение атрибута message-digest не соответствует расчетному знач

Сообщение Anonymous »

пожалуйста, посмотрите мой код для Android о проверке подписи с помощью jumpycastle. условие: есть один файл cms и root.crt, используйте root.crt для проверки файла cms. первое использование: openssl smime -verify -CAfile root.crt -in index.cms -out index_verify.log, все прошло успешно. но я хочу написать код в приложении для Android, но это плохо. код, как показано ниже:

Код: Выделить всё

private boolean verifySMIMESignature(String smime, String xmlHash) {
try {
Provider provider = new BouncyCastleProvider();
Security.addProvider(provider);

String orignal_value = "\n" +
"    \n" +
"        index.xml\n" +
"        /R/6Y0pYNL3egASx2X3cxP4kixMesXMHEU2pYFp/mB8=\n" +
"        sha256\n" +
"        
.\n" +
"    \n" +
"";

CMSSignedData signedData = new CMSSignedData(new CMSProcessableByteArray(orignal_value.getBytes()), extractCMSFromSMIME(smime));
Store certStore = signedData.getCertificates();
SignerInformation signer = signedData.getSignerInfos().getSigners().iterator().next();

Collection certCollection = certStore.getMatches(signer.getSID());
X509CertificateHolder certHolder = certCollection.iterator().next();
X509Certificate signerCert = new JcaX509CertificateConverter().getCertificate(certHolder);
Log.d(TAG, "Using signer certificate: " + signerCert.getSubjectDN());

SignerInformationVerifier verifier = new JcaSimpleSignerInfoVerifierBuilder()
.setProvider(provider)
.build(signerCert);

return signer.verify(verifier);

} catch (Exception e) {
Log.e(TAG, "verify fail: " + e.getMessage(), e);
return false;
}
}

private byte[] extractCMSFromSMIME(String smimeData) {
String[] lines = smimeData.split("\n");
boolean cmsBegin = false;
String boundary = null;
StringBuilder contentBuilder = new StringBuilder();
for (String line : lines) {
if (line.contains("boundary=")) {
int start = line.indexOf("boundary=\"") + "boundary=\"".length();
int end = line.length() - 2;
Log.d(TAG, "starttttttt: " + start + " end: " + end);
boundary = line.substring(start, end);
Log.d(TAG, "find boundary: " + boundary);
continue;
}
if (!cmsBegin && line.contains("Content-Disposition:")) {
cmsBegin = true;
continue;
}
if (cmsBegin) {
if (!TextUtils.isEmpty(boundary) && line.contains(boundary)) {
break;
} else {
contentBuilder.append(line);
}
}
}
String cmsString = contentBuilder.toString();
Log.d(TAG, "cms: " + cmsString);
return Base64.getDecoder().decode(cmsString);
}
extractCMSFromSMIME предназначен для извлечения подписи из файла cms. orignal_value — исходное значение. код не использует root.crt, и использовать его самосертификат также не удается. результат показывает org.bouncycastle.cms.CMSSignerDigestMismatchException: значение атрибута message-digest не соответствует расчетному значению.
Я пробую многие методы, но, к счастью, все не удается. пожалуйста, помогите решить эту проблему. спасибо

Подробнее здесь: https://stackoverflow.com/questions/793 ... -attribute
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»