Статус: Участник
Группы: Участники
Зарегистрирован: 03.10.2023(UTC) Сообщений: 12
|
Автор: Андрей * выше с вызовом, обернуть его в try: ... except: ... получить сертификат
пробовали?
Получилось, большое спасибо!
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.08.2023(UTC) Сообщений: 21 Откуда: Ставрополь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 1 раз в 1 постах
|
Здравствуйте! Можете подсказать, есть ли пример данного кода с JS на Python с использованием библиотеки pycades? Код:public String signMap(Map<String, String> paramsToSign) {
try {
PrivateKey privateKey = getKey();
Certificate certificate = getCert();
StringBuilder toSign = new StringBuilder();
for (String s : paramsToSign.values()) {
toSign.append(s);
}
System.out.println("toSign:");
System.out.println(toSign);
byte[] data = toSign.toString().getBytes(StandardCharsets.UTF_8);
String algorithmFromCert = certificate.getPublicKey().getAlgorithm();
String algorithm = getAlgorithm(algorithmFromCert);
Signature signature = Signature.getInstance(algorithm, JCP.PROVIDER_NAME);
signature.initSign(privateKey);
signature.update(data);
byte[] secretBytes = signature.sign();
return Base64.encodeBase64URLSafeString(secretBytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,316 Сказал «Спасибо»: 549 раз Поблагодарили: 2206 раз в 1721 постах
|
Автор: EgorKenk Здравствуйте! Можете подсказать, есть ли пример данного кода с JS на Python с использованием библиотеки pycades? Код:public String signMap(Map<String, String> paramsToSign) {
try {
PrivateKey privateKey = getKey();
Certificate certificate = getCert();
StringBuilder toSign = new StringBuilder();
for (String s : paramsToSign.values()) {
toSign.append(s);
}
System.out.println("toSign:");
System.out.println(toSign);
byte[] data = toSign.toString().getBytes(StandardCharsets.UTF_8);
String algorithmFromCert = certificate.getPublicKey().getAlgorithm();
String algorithm = getAlgorithm(algorithmFromCert);
Signature signature = Signature.getInstance(algorithm, JCP.PROVIDER_NAME);
signature.initSign(privateKey);
signature.update(data);
byte[] secretBytes = signature.sign();
return Base64.encodeBase64URLSafeString(secretBytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Здравствуйте. В примерах есть подписаниеp.s. не это js, а java |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.08.2023(UTC) Сообщений: 21 Откуда: Ставрополь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Андрей * Автор: EgorKenk Здравствуйте! Можете подсказать, есть ли пример данного кода с JS на Python с использованием библиотеки pycades? Код:public String signMap(Map<String, String> paramsToSign) {
try {
PrivateKey privateKey = getKey();
Certificate certificate = getCert();
StringBuilder toSign = new StringBuilder();
for (String s : paramsToSign.values()) {
toSign.append(s);
}
System.out.println("toSign:");
System.out.println(toSign);
byte[] data = toSign.toString().getBytes(StandardCharsets.UTF_8);
String algorithmFromCert = certificate.getPublicKey().getAlgorithm();
String algorithm = getAlgorithm(algorithmFromCert);
Signature signature = Signature.getInstance(algorithm, JCP.PROVIDER_NAME);
signature.initSign(privateKey);
signature.update(data);
byte[] secretBytes = signature.sign();
return Base64.encodeBase64URLSafeString(secretBytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Здравствуйте. В примерах есть подписаниеp.s. не это js, а java Спасибо, с утра голова совсем не варит, раз перепутал Java с JS. Не подскажите, в данном примере на Java данные не хешируются перед подписанием?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.08.2023(UTC) Сообщений: 21 Откуда: Ставрополь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 1 раз в 1 постах
|
Просто в исходном коде в параметр algorithm метода Signature.getInstance(algorithm, JCP.PROVIDER_NAME) подставляется значение JCP.GOST_SIGN_2012_256_NAME. Я так думаю, что данные, передаваемые в этот метод просто подписываются, без хеширования, но до конца в этом не уверен.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,316 Сказал «Спасибо»: 549 раз Поблагодарили: 2206 раз в 1721 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.08.2023(UTC) Сообщений: 21 Откуда: Ставрополь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 1 раз в 1 постах
|
На выходе скорее всего требуется подпись, которая включает в себя данные о сертификате. Я так понимаю, что это cms формат, так как в raw формате нельзя получить данные о сертификате. Я как раз таки и хотел узнать, что на выходе этой функции получается, так как это единственный пример от ЕСИА, который показывает, как подписывать данные при помощи их алгоритма подписи data hash.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.10.2023(UTC) Сообщений: 12
|
Внезапно перестал работать код, который до этого прекрасно работал: Код:sign = open(sign_file, "rb").read()
enc_sign = base64.b64encode(sign)
signed_data = pycades.SignedData()
signed_data.Content = "Random data"
try:
signed_data.VerifyCades(enc_sign.decode("utf-8"), pycades.CADESCOM_CADES_BES, True)
except Exception:
pass
cert = signed_data.Signers.Item(1).Certificate
Выдает вот такое: Код:Traceback (most recent call last):
File "./sign.py", line 31, in <module>
cert = signed_data.Signers.Item(1).Certificate
Exception: Internal error. (0x800B0100)
С чем это может быть связано?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,316 Сказал «Спасибо»: 549 раз Поблагодарили: 2206 раз в 1721 постах
|
No signature was present in the subject. (0x800B0100) В этом объекте нет подписи. (0x800B0100)
Смотреть, что передаётся на вход. Проверять, на том, что ранее успешно проверялось.
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.10.2023(UTC) Сообщений: 12
|
Автор: Андрей * No signature was present in the subject. (0x800B0100) В этом объекте нет подписи. (0x800B0100)
Смотреть, что передаётся на вход. Проверять, на том, что ранее успешно проверялось.
Что я выяснил: если я в Линуксе подписываю файл в cptools, то для этих подписей код работает. А вот для тех файлов, которые нам присылают из другой организации, не работает. Хотя их подписи успешно проверяются через cryptcp. Они каким-то другим способом могут подписывать? Но почему тогда cryptcp нормально проверяет?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close