如何在Python中使用PyASN编写ASN1编码的INTEGER (1..MAX)?

2 投票
1 回答
595 浏览
提问于 2025-04-17 23:01

我正在尝试在Python中使用PyASN库实现一些编码功能。我需要定义一个类,在这个类里我应该实现以下内容:

pbkdf2params ::= SEQUENCE {
salt OCTET STRING,
iterationCount INTEGER (1..MAX),
keyLength INTEGER (1..MAX)
}

我定义的Python类如下:

class pbkdf2params(univ.Sequence):
 componentType = namedtype.NamedTypes(
   namedtype.NamedType('salt', univ.OctetString()),
   namedtype.NamedType('iterationCount', univ.integer(1,MAX)), 
   namedtype.NamedType('keyLength', univ.integer(1, MAX))
   )

但是我觉得这个实现可能不太对,特别是对于整数(1..MAX)这一部分。我漏掉了什么呢?在这种情况下,MAX的值应该是多少呢?

1 个回答

2

你需要给整数对象添加一个值范围限制,像这样:

from pyasn1.type import univ, namedtype, constraint

class Pbkdf2params(univ.Sequence):
    componentType = namedtype.NamedTypes(
        namedtype.NamedType('salt', univ.OctetString()),
        namedtype.NamedType('iterationCount', univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(1,MAX)), 
        namedtype.NamedType('keyLength', univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(1, MAX))
    )

每当你试图用一个超出范围的值来初始化整数时,就会抛出一个异常。

撰写回答