Вопрос по encryption, java, cryptography, pkcs#7 – PKCS # 7 Шифрование

2

Какие шаги необходимо выполнить, чтобы зашифровать, подписать, расшифровать и проверить подпись с помощью Java.         используя алгоритм PKCS # 7,         Какая польза от хранилища ключей Java? в отношении PKCS # 7.

Ваш Ответ

1   ответ
4

Step 1 Генерация ключа с помощью утилиты keytool.Вот вы найдете хороший учебник

Step 2 Загрузите хранилище ключей

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.security.KeyStore;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.SystemUtils;

public class MyKeystoreProvider {
  public KeyStore getKeystore(char[] password) throws GeneralSecurityException, IOException {
    KeyStore keystore = KeyStore.getInstance("jks");
    InputStream input = new FileInputStream(SystemUtils.USER_HOME + File.separator + ".keystore");
    try {
      keystore.load(input, password);
    } catch (IOException e) {
    } finally {
      IOUtils.closeQuietly(input);
    }
    return keystore;
  }
}

Шаг 3 Далее предположим, что вы хотите иметь некоторый код, который подписывает некоторый контент. Допустим, ваш контент представляет собой набор текста ASCII, который вы можете представить в виде массива байтов. поэтому вы будете использовать некоторые классы Bouncy Castle для генерации & # x201C; данных, подписанных CMS & # x201D ;:

  public byte[] sign(byte[] data) throws 
           GeneralSecurityException, CMSException, IOException {
      Security.addProvider(new BouncyCastleProvider());
      CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
      generator.addSigner(getPrivateKey(), (X509Certificate) getCertificate(),
          CMSSignedDataGenerator.DIGEST_SHA1);
      generator.addCertificatesAndCRLs(getCertStore());
      CMSProcessable content = new CMSProcessableByteArray(data);

      CMSSignedData signedData = generator.generate(content, true, "BC");
      return signedData.getEncoded();
    }

private CertStore getCertStore() throws GeneralSecurityException {
  ArrayList<Certificate> list = new ArrayList<Certificate>();
  Certificate[] certificates = getKeystore().getCertificateChain(this.alias);
  for (int i = 0, length = certificates == null ? 0 : certificates.length; i < length; i++) {
    list.add(certificates[i]);
  }
  return CertStore.getInstance("Collection", new CollectionCertStoreParameters(list), "BC");
}

private PrivateKey getPrivateKey() throws GeneralSecurityException {
  if (this.privateKey == null) {
     this.privateKey = initalizePrivateKey();
  }
  return this.privateKey;
}

private PrivateKey initalizePrivateKey() throws GeneralSecurityException {
   KeyStore keystore = new MyKeystoreProvider().getKeystore();
   return (PrivateKey) keystore.getKey(this.alias, getPasswordAsCharArray());
}

И теперь, наконец, чтобы получить оригинальное содержание.

CMSSignedData s = new CMSSignedData(signedBytes);
CertStore certs = s.getCertificatesAndCRLs("Collection", "BC");
SignerInformationStore signers = s.getSignerInfos();
boolean verified = false;

    for (Iterator i = signers.getSigners().iterator(); i.hasNext(); ) {
      SignerInformation signer = (SignerInformation) i.next();
      Collection<? extends Certificate> certCollection = certs.getCertificates(signer.getSID());
      if (!certCollection.isEmpty()) {
        X509Certificate cert = (X509Certificate) certCollection.iterator().next();
        if (signer.verify(cert.getPublicKey(), "BC")) {
          verified = true;
        }
      }
    }
    CMSProcessable signedContent = s.getSignedContent() ;
    byte[] originalContent  = (byte[]) signedContent.getContent();
У меня простой вопрос по поводу P7: pkcs7 использует для незашифрованных сообщений? Я имею в виду, можно ли преобразовать простое сообщение в формат PKCS7 без шифрования?
Спасибо Vipul В шаге 3generator.addSigner(getPrivateKey(), (X509Certificate) getCertificate(), CMSSignedDataGenerator.DIGEST_SHA1); Что такое getCertificate () и как он работает? Abhijeet
Если вы можете использовать PKCS. У них очень хорошая документация. :)
Пожалуйста, пришлите мне ссылку, о которой вы говорите .... Большое спасибо Abhijeet

Похожие вопросы