Статус: Новичок
Группы: Участники
Зарегистрирован: 09.11.2016(UTC) Сообщений: 4
|
Добрый день, есть файл подписаннный Крипто Арм 1.2.643.2.45.1.1.1 \ 1.3.6.1.4.1.311.2.1.120 = комментарий к подписи 1.2.643.2.45.1.1.2 = имя файла 1.2.643.2.45.1.1.3 = использование подписи (подписано, утверждено и т.д.) Нужно получить значения аттарибутов список аттрибутов SignerInfo[] signerInfos = signedData.signerInfos.elements; значение в массиве байт аттрибута((Asn1OctetString) signerInfo.signedAttrs.elements[5].values.elements[0]).value попытка получить сроку String result = new String(((Asn1OctetString) signerInfo.signedAttrs.elements[5].values.elements[0]).value); Выходная строка поулчаесят с квадратами. http://i68.tinypic.com/1zw1np.jpgт.е исходный текcт (M571237) плюс нечитаемые символы. Дeмал проблема в кодировке, но подобрать не получилось.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Вероятно, это не Asn1OctetString. Попробуйте посмотреть атрибут в каком-нибудь asn1 декодировщике и узнать тип значения. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.11.2016(UTC) Сообщений: 4
|
Показывает что это тип Asn1openType Внутри стринг вида 30181e0e004d0035003700310032003300371e0200201e020020 или 1e0e004d003500370031003200330037 пробовал сконвертить через javax.xml.bind.DatatypeConverter new String(DatatypeConverter.parseHexBinary("30181e0e004d0035003700310032003300371e0200201e020020")) Получаю на выходе нужныем мне данные с квадратами как и в прошлом примере Декодер https://holtstrom.com/mi...el/tools/asn1decoder.phpвыдает на две мои строки SEQUENCE { [1e] 004d003500370031003200330037 [1e] 0020 [1e] 0020 } + [1e] 004d003500370031003200330037 тип показал Asn1CharSet Как вытащить правильно или преобразовать? Asn1openType в Asn1CharSet не хочет.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.11.2016(UTC) Сообщений: 4
|
Добавление: воможно можно воспользоватсья методом decode у Asn1openType. но нужно дать ему на вход буфер, а буфер принимает массив байт. но я не могу получить массив байт из моей перемнной типа Asn1openType. только если сменить ей тип на Asn1OctetString. В общем запутался я.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.11.2016(UTC) Сообщений: 4
|
Если долго мучаться то что то и получится. Решил проблеум через bouncycastle
Вытаскиваем закодированное значение из аттрибутов
Asn1OpenType sa3 = ((Asn1OpenType) signerInfo.signedAttrs.elements[3].values.elements[0])
Берем массив байт byte[] myb3 = sa3.value;
С помощью доп метода делаем из массива DER обьект
ASN1Primitive derObject = toDERObject(myb3); Видим в дебаггере тип или derObject.getClass() Вытаскиваем значение DERBMPString derOctetString = (DERBMPString) derObject; String decoded = derOctetString.toString();
private ASN1Primitive toDERObject(byte[] data) throws IOException { ByteArrayInputStream inStream = new ByteArrayInputStream(data); ASN1InputStream asnInputStream = new ASN1InputStream(inStream);
return asnInputStream.readObject(); }
PS: второй аттрибут оказался типа DLSequence и содержкал тоже значение и два пустых значения. Возможно это фишка крипто арма.
PPS: Есть другйо спсоб декодировать данные?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close