用 Kerberos 为 J2ME 应用程序上锁,第 3 部分: 建立与电子银行的安全通信(上)
2010-03-30 00:00:00 来源:WEB开发网getLength()
这个方法的目的是检查一个特定的 AS1 结构有多少个字节。处理应用程序通常有一个由多个 ASN.1 结构构成的嵌入层次所组成的字节数组。 getLength() 方法计算特定结构中的字节数。
这个方法取两个参数。第一个参数( ASN1Structure )是一个字节数组,它应当包含至少一个完整的 ASN.1 结构,这个结构本身包含标签字节、长度字节和内容字节。第二个参数( offset )是一个在 ASN1Structure 字节数组中的偏移值。这个参数指定在 ASN1Structure 字节数组中包含的 ASN.1 结构的开始位置。
getLength() 方法返回一个等于从 offset 字节处开始的 ASN.1 结构中的字节总数。
看一下 清单 6,它显示了 getLength() 方法的一个实现:
第一步是向 getNumberOfLengthBytes() 方法传 ASN.1 结构的第二个字节。这个 ASN.1 结构从 offset 字节开始,所以可以预计 offset 字节实际上就是标签字节。因为所有 Kerberos 结构只包含一个标签字节,所以第二个字节(在 offset 字节后面的那个字节)是第一个长度字节。第一个长度字节说明长度字节的总字节数, getNumberOfLengthBytes() 方法返回长度字节数。 int numberOfLengthBytes = getNumberOfLengthBytes(ASN1Structure [offset+1]); 这一行执行这项任务 。
如果 getNumberOfLengthBytes() 方法返回一个大于 1 的值,那么必须处理 多字节 长度表示法。在这种情况下,将从 offset + 2 (让过标签字节和第一个长度字节) 开始的长度字节读到一个名为 lengthValueAsBytes 的变量中。然后用 getIntegerValue() 方法将长度值从 ASN.1 字节转换为 J2ME int 。最后,将结果加 1(以补偿不包含在长度值中的标签字节),再将长度值返回给调用应用程序。
更多精彩
赞助商链接