Найти - Пользователи
Полная версия: M2Crypto + неправильная кодировка.
Начало » Python для новичков » M2Crypto + неправильная кодировка.
1 2
Putsli
Приветствую,
сразу хочу сообщить что я ни разу не программист. Есть задача вытащить из сертификата дополнение “subjectAltName”.
Насколько я понимаю, в моём сертификате, это поле “DirName”. Почитав немного о модуле M2Crypto,
налабал такой “код”:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import glob, M2Crypto.X509 as pki

for file in glob.glob("*.cer"):
cert = pki.load_cert(('%s' % file), format=0)
print cert.get_ext('subjectAltName').get_value()
После исполнения кода в консоли появляются такие вот кракозябры:
DirName:/CN=\xD0\x90\xD0\xBF\xD0\xB0\xD0\xBD\xD0\xB0\xD1\x81\xD0\xB5\xD0\xB2\xD0\xB8\xD1\x87 \xD0\x91\xD0\xBE\xD1\x80\xD0\xB8\xD1\x81 \xD0\x92\xD0\xB0\xD1\x81\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xB5\xD0\xB2\xD0\xB8\xD1\x87
Я так понимаю что это utf-8, помогите плз. привести вывод программы к читаемому виду.
s0rg
fd = open( "filename", 'rb' )
key = fd.read().encode( 'ascii' )
Putsli
Хм, я вроде как не обычный файл открываю, а сертификат.
s0rg
Putsli
Хм, я вроде как не обычный файл открываю, а сертификат.
А разница в чем? Этот пример из моего опыта работы с M2Crypto. Python открывает файл как unicode, M2Crypto (вернее его нижняя с-обвязка) хочет ascii.
Putsli
key = fd.read().encode( 'ascii' )
UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 1: ordinal not in range(128)
Вот что получаю в консоли.
s0rg
Ну как так )
Я же привел общий код, в вашем случае:
print cert.get_ext('subjectAltName').get_value().encode( 'ascii' )
Putsli
Это я попробовал первым делом, на выходе по прежнему точно такие же кракозябры.
s0rg
Так, а какая система у вас?
Putsli
Linux, Ubuntu 11.04, причём вот это:
print cert.get_subject().CN
нормально отрабатывает, всё читается.
s0rg
print cert.as_text()
А такой вариант что выдаст?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB