用 Kerberos 为 J2ME 应用程序上锁,第 2 部分: 生成一个 Kerberos 票据请求
2010-03-30 00:00:00 来源:WEB开发网这个方法首先声明一个名为 finalBytes 的字节数组。这个字节数组包含 INTEGER 数据类型结构的所有字节。不过,我还不知道 finalBytes 数组的大小。我首先需要计算 INTEGER 结构中的字节数,这种计算由几步组成:
第一步是计算容纳这个整数值( INTEGER 结构的内容部分)所需要的字节数。为此,我使用了一个 do - while 循环,它不断地将 value 整数除以 256,直到得到的值小于1。当这个循环退出时,容纳内容部分所需要的字节数就储存在一个名为 contentBytesCount 的变量中。
这个方法再将所需要的长度作为一个整数传递给 getLengthBytes() 方法,这个方法返回以 ASN.1 表达的长度字节。我将长度字节数储存到一个名为 lengthBytesCount 的变量中。
回想一下在 本系列第一篇文章中讨论过,所有 ASN.1 数据类型表达的字节数组都包含三个部分:标签字节、长度字节和内容字节。因此,ASN.1 字节数组表达需要包含所有这三部分的足够空间。
下一步是计算将要包含 INTEGER 结构的所有字节的数组的大小。我是通过将标签字节长度(对于 INTEGER 和所有其他在 Kerberos 中使用的标签来说是 1)、长度字节数和内容字节数相加进行这种计算的。 int totalBytesCount = 1 + lengthBytesCount + contentBytesCount; 一行进行的就是这种计算,并将所需要的字节数储存到一个名为 totalBytesCount 的变量中。
下面,我实例化一个大小为 totalBytesCount 的字节数组 finalBytes 。过程的其余部分很简单,我将标签字节(对于 INTEGER 来说是 0x02 )储存到 finalBytes 数组的开始处。然后,将长度字节拷贝到 finalBytes 数组中标签字节后面。最后,我将内容字节拷贝到长度字节后并返回 finalBytes 数组。
更多精彩
赞助商链接