用Kerberos为J2ME应用程序上锁,第3部分 - 建立与电子银行的安全通信(上) - 编程入门网
则它返回 false。
清单 2. isSequence() 方法
getIntegerValue() 清单 3 中显示的 getIntegerValue() 方法只取一个输入参数,它是表示一个 ASN.1 INTEGER 数据类 型的内容的 字节 数组。它将输入 字节 数组转换为 J2ME int 数据类型,并返回 J2ME int 。在从 ASN.1 INTEGER 中提取了内容字节,并且希望知道它所表示的是什么 integer 值时就需要这个方法。还 要用这个方法将长度字节转换为 J2ME int 。 用Kerberos为J2ME应用程序上锁,第3部分 - 建立与电子银行的安全通信(上)(3)时间:2011-08-05 IBM Faheem Khan注意,getIntegerValue() 方法设计为只处理正的 integer 值。 ASN.1 以最高有效位优先(most-significant-byte-first)的序列存储一个正的 INTEGER 。例如, 用 ASN.1 表示的十进制 511 就是 0x01 0xFF 。可以写出十进制值的完整位表示(对于 511 ,它是 1 11111111 ),然后对每一个字节写出 十六进制 值(对于 511,它是 0x01, 0xFF ),最后以最高有效位 优先的顺序写出 十六进制 值。 另一方面,在 J2ME 中一个 int 总是四字节长,并且最低有效 字节 占据了最右边的位置。在正 integer 值中空出的位置上填入零。例如,对于 511 ,J2ME int 的写法是 0x00 0x00 0x01 0xFF 。 这意味着在将 ASN.1 INTEGER 转换为一个 J2ME int 时,必须将输入数组的每一个 字节 正确地放到 输出 J2ME int 中的相应位置上。 例如,如果输入字节数组包含两个字节的数据 (0x01, 0xFF) ,那么必须像下面这样将这些字节放到 输出 int 中: 必须在输出 int 的最左边或者最高有效位置写入 0x00 。 类似地,必须在与输出 int 的最高有效 字节 相邻的位置上写入 0x00 。 输入数组的第一个字节 (0x01) 放入输出 int 中与最低有效位置相邻的位置。 输出数组的第二个字节 (0xFF) 放到输出 int 的最低有效或者最右边的位置。 getIntegerValue() 方法中的 for 循环计算每一个 字节 的正确位置,再将这个 字节 拷贝到其相应 的位置上。 还要注意因为 J2ME int 总是有四个字节,getIntegerValue() 方法只能处理最多四 字节 integer 值。能力有限的、基于 J2ME 的 Kerberos 客户不需要处理更大的值。 清单 3. getIntegerValue() 方法
isASN1Structure() 清单 4 中显示的 isASN1Structure() 方法分析一个输入字节是否表示具有特定标签号的特定类型的 ASN.1 结构(即,特定于上下文的 (context specific)、应用程序级 (application level) 或者通用类 型 (universal type ))的标签字节(第一个字节)。 这个方法取三个参数。第一个参数( tagByte )是要分析的输入 字节 。第二和第三个参数( tagType 和 tagNumber )分别表示所要查找的标签类型和标签号。 为了检查 tagByte 是否具有所需要的标签号的标签类型,isASN1Structure() 方法首先用 tagType 和 tagNumber 参数构建一个新的临时标签字节( tempTagByte )。然后比较 tempTagByte 与 tagByte 。如果它们是相同的,那么方法就返回 true,如果不相同它就返回 false。 清单 4. isASN1Structure() 方法
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |