Я пытаюсь реализовать пользовательский идентификатор объекта ASN1 в Python, это примеры тестовых примеров.Python. Преобразование идентификатора объекта ASN1
asn1_objectidentifier([1,2])
asn1_objectidentifier([1,2,840])
asn1_objectidentifier([1,2,840,5,1000000])
asn1_objectidentifier([1,2,840,5,127,128,129])
, что мне не удалось сделать, кодирующая value3 ... значение п в базе 128 это мой код до сих пор
def asn1_objectidentifier(oid):
first_octet = 40 * oid[0] + oid[1]
rest = ""
length = 1
for v in range(2, len(oid)):
if oid[v] < 127:
rest += chr(oid[v])
length += 1
else:
rem = oid[v]/128
first = (rem * 128)^1
second = (oid[v] - first) * 128^0
rest += int_to_bytestring(first)
rest += int_to_bytestring(second)
length += 2
rest = chr(first_octet) + rest
return chr(0x06) + chr(length) + rest
Для тех из нас, кто не знаком с ASN.1, что такое кодировка базы 128? – martineau
@martineau Я также не мог узнать, что и в myselft я нашел один пример. это для идентификатора объекта 1.2.840, а 840 = 6 * 128^1 = 769 72 * 128^0 = 71 –
В этой статье объясняется, как кодировать и декодировать дуги со значением 128 и более: https://msdn.microsoft .com/en-us/library/windows/desktop/bb540809 (v = vs.85) .aspx – Crypt32