Код: Выделить всё
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);
}
Я пробую многие методы, но, к счастью, все не удается. пожалуйста, помогите решить эту проблему. спасибо
Подробнее здесь: https://stackoverflow.com/questions/793 ... -attribute
Мобильная версия