用Kerberos为J2ME应用程序上锁,第2部分 - 生成一个Kerberos票据请求 - 编程入门网
实际的长度值。如果长度值至少为 256 并小于 65536(256 乘 256),那么就需要总共 3 个长度 字节 ―― 1 个字节表明还有 2 个长度字节,两个字节包含实际的长度值。
因此,在多字节格式中所需要的字节数取决于长度值。这就是为什么在 getLengthBytes() 的 else 块的 do - while 循环中要计算长度字节所需要的字节数。 确定所需要字节数的方法很简单。我声明了一个名为 bytesRequired 的字节计数器,从 2 开始计数 (所需要的最少字节数),将长度值除以 256,并检查商是否大于或者等于 1。如果是,那么就表明原始 长度值大于 256,因而需要至少 3 个字节,所以我增加计数器( bytesRequired )。 我继续将长度值除以 256 并增加字节计数器,直到除得的值小于 1。这时,我就知道找到了在多字节 整数格式中需要的字节数。 知道了所需要的字节数后,我就实例化一个具有适当大小的字节数组。自然,长度字节中的第一个字 节将表明还有多少个长度字节。因此,我只是将所需要的字节数减 1( bytesRequired-1 ),并拷贝到 一个名为 firstLengthByte 的字节中。 看一下清单 2 中 getLengthBytes() 方法中的 firstLengthByte |= 0x80 这一行代码。这一行代码 对 firstLengthByte 和 0x80 ( 1000 0000 )进行按拉 OR 操作,并将结果储存到 firstLengthByte 中。这种逻辑 OR 操作会将 firstLengthByte 的最左边(最高有效)位设置为 1。回想在本系列 第一篇 文章 中的讨论,在希望使用多字节整数格式的时候,必须将第一个长度字节的最左边一位设置为 1。 下一行( lengthBytes[0]=firstLengthByte )只是拷贝在包含长度字节的数组的开始位置上的 firstLengthByte 。然后,有一个 for 循环,它将长度字节从长度参数中拷贝到在 lengthBytes 数组中 它们的正确位置上。当 for 循环退出时,就得到了符合 ASN.1 格式的这个 lengthBytes 数组。清单 2 中 getLengthBytes() 方法的最后一行返回这个数组。 getIntegerBytes() 这个方法取一个整数( value )作为参数并返回以 ASN.1 INTEGER 表达的这个整数值。回想一下在 本系列 第一篇文章 的表 1 中曾提到,在ASN.1 中 INTEGER 是一种通用数据类型。 清单 3 中显示了 getIntegerBytes() 方法的实现。 清单 3. getIntegerBytes() 方法
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |