快速业务通道

用Kerberos为J2ME应用程序上锁,第3部分 - 建立与电子银行的安全通信(上) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
则它返回 false。

清单 2. isSequence() 方法

public boolean isSequence(byte tagByte)    {     if (tagByte == (byte)0x30)       return true;     else       return false;    }//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() 方法

public int getIntegerValue(byte[] intValueAsBytes)    {     int intValue = 0;     int i = intValueAsBytes.length;     for (int y = 0; y < i; y++)       intValue |= ((int)intValueAsBytes[y] & 0xff) << ((i-(y+1)) *  8);     return intValue;    }//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() 方法

public boolean isASN1Structure (byte 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号