快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
一个长度字节说 明长度字节的总字节数,getNumberOfLengthBytes() 方法返回长度字节数。int numberOfLengthBytes = getNumberOfLengthBytes(ASN1Structure [offset+1]); 这一行执行这项任务 。

如果 getNumberOfLengthBytes() 方法返回一个大于 1 的值,那么必须处理 多字节 长度表示法。在 这种情况下,将从 offset + 2 (让过标签字节和第一个长度字节) 开始的长度字节读到一个名为 lengthValueAsBytes 的变量中。然后用 getIntegerValue() 方法将长度值从 ASN.1 字节转换为 J2ME int 。最后,将结果加 1(以补偿不包含在长度值中的标签字节),再将长度值返回给调用应用程序。

如果 getNumberOfLengthBytes() 方法返回 1,则要处理 单字节 长度表示法。在这种情况下,只要 将第一个(也是惟一的一个)长度字节转换为 J2ME int ,对它加 1(以补偿不包含在长度值中的标签字 节),并将得到的值返回给调用应用程序。

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

时间:2011-08-05 IBM Faheem Khan

清单 6 getLength() 方法

public int getLength (byte[] ASN1Structure, int offset) {     int structureLength;     int numberOfLengthBytes = getNumberOfLengthBytes(ASN1Structure[offset +  1]);     byte[] lengthValueAsBytes = new byte[numberOfLengthBytes - 1];     if (numberOfLengthBytes > 1)     {       for (int i=0; i < numberOfLengthBytes-1 ; i++)        lengthValueAsBytes[i]= ASN1Structure [offset + i + 2];       structureLength = getIntegerValue(lengthValueAsBytes);     }     else       structureLength = (int) (ASN1Structure[offset+1]);     structureLength += numberOfLengthBytes + 1;     return structureLength;    }//getLength()

getASN1Structure

清单 7 中的 getASN1Structure() 方法从一个包含一系列 ASN.1 结构的字节数组中找出并提取特定 ASN.1 结构。这个方法有三个参数。第一个参数( inputByteArray )是输入字节数组,需要从这个字节 数组中找到所需要的 ASN.1 结构。第二个参数是一个 int ,它指定要查找的标签的类型。第三个参数指 定标签号。

看一下 清单 7 中的 getASN1Strucute() 方法实现。它将 offset 值初始化为零并进入 do-while 循 环。

在 do-while 循环中,将字节数组中第一个字节读入名为 tagByte 的字节中。然后用 isASN1Structure() 方法检查输入数组的第一个字节是否是所需要的 ASN.1 结构。

如果第一个字节代表所需要的结构,那么就用 getLength() 方法找到要返回的所需数量的字节。然后 将所需要的字节拷贝到名为 outputBytes 的字节数组中、并将这些字节返回到调用应用程序。

如果第一个字节不代表所需要的结构,那么就要跳到下一个结构。为此,将 offset 值设置为下一个 结构的开始位置。

do-while 循环在下一个循环中检查下一个结构,并以此方式检查整个输入数组。如果没有找到所需要 的结构,那么 do-while 循环就会退出并返回 null。

清单 7. getASN1Structure() 方法

public byte[] getASN1Structure (byte[] inputByteArray, int tagType, int  tagNumber)    {     byte tagByte;     int offset = 0;     do {       tagByte = inputByteArray[offset];       if (isASN1Structure(tagByte, tagType, tagNumber)) {        int lengthOfStructure = getLength(inputByteArray, offset);        byte[] outputBytes

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号