Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2021(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 4 раз
|
Помогите пожалуйста сделать Unwrap симметричного ключа на c++. У меня есть код на Java, но я не понимаю, как его повторить на с++. Код на Java:
Cipher cipher = Cipher.getInstance(WRAP_ALGORITHM, PROVIDER_NAME); cipher.init(Cipher.UNWRAP_MODE, privateKey); final SecretKey unwrappedSecretKey = (SecretKey) cipher .unwrap(wrappedSecret, null, Cipher.SECRET_KEY);
Какой на C++ есть аналог класса Cipher?
Вот полный код метода:
package s.s.sce.crypto;
import ru.CryptoPro.JCP.JCP; import ru.CryptoPro.JCP.Util.JCPInit; import ru.CryptoPro.JCP.params.AlgIdSpec; import ru.CryptoPro.JCP.spec.NameAlgIdSpec; import ru.CryptoPro.JCP.tools.AlgorithmTools; import ru.CryptoPro.JCPRequest.GostCertificateRequest; import ru.CryptoPro.JCSP.JCSP;
import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.spec.AlgorithmParameterSpec; import java.util.Arrays; import java.util.Base64;
public class GostCryptoService {
/** * Алгоритм ключа шифрования. */ private static final String SECRET_KEY_ALGORITHM = JCP.GOST_K_CIPHER_NAME;
/** * Алгоритм шифрования данных. */ private static final String CIPHER_ALGORITHM = SECRET_KEY_ALGORITHM + "/CFB/NoPadding";
/** * Алгоритм экспорта/импорта секретного ключа. */ private static final String WRAP_ALGORITHM = JCSP.GOST_TRANSPORT_K;
/** * Имя провайдера. */ private static final String PROVIDER_NAME = JCSP.PROVIDER_NAME;
private static final String CONTAINER_PATH = "\\\\.\\HDIMAGE\\";
private static final String CONTAINER_ALIAS = "secret-cloud";
public GostCryptoService() { JCPInit.initProviders(true); }
public void decrypt(String encFilePath) throws Exception { try (FileInputStream encFis = new FileInputStream(encFilePath)) { byte[] decodedSecret = new byte[277]; encFis.read(decodedSecret); byte[] iv = Arrays.copyOfRange(decodedSecret, 261, decodedSecret.length); byte[] wrappedSecret = Arrays.copyOfRange(decodedSecret, 0, 261);
KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME); keyStore.load(null, null); PrivateKey privateKey = (PrivateKey) keyStore.getKey(CONTAINER_ALIAS, null); if (privateKey == null) { throw new Exception("Приватный ключ не сгенерирован."); } Cipher cipher = Cipher.getInstance(WRAP_ALGORITHM, PROVIDER_NAME); cipher.init(Cipher.UNWRAP_MODE, privateKey); final SecretKey unwrappedSecretKey = (SecretKey) cipher .unwrap(wrappedSecret, null, Cipher.SECRET_KEY);
cipher = Cipher.getInstance(CIPHER_ALGORITHM, PROVIDER_NAME); AlgorithmParameterSpec parameterSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, unwrappedSecretKey, parameterSpec, null);
String decFileName = new File(encFilePath).getName().split(".enc")[0]; byte[] buffer = new byte[2048]; try (FileOutputStream decrFos = new FileOutputStream(decFileName)) { int n; while ((n = encFis.read(buffer)) > 0) { decrFos.write(cipher.update(buffer), 0, n); } } } }
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 30.06.2016(UTC) Сообщений: 3,478   Сказал «Спасибо»: 53 раз Поблагодарили: 801 раз в 740 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2021(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 4 раз
|
Автор: Александр Лавник  Но какой аналог Cipher?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.12.2021(UTC) Сообщений: 15
Сказал(а) «Спасибо»: 4 раз
|
Автор: Александр Лавник  Там нет ничего похожего на unwrap ключа! Можете подсказать конкретнее?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close