快速业务通道

用Kerberos为J2ME应用程序上锁,第2部分 - 生成一个Kerberos票据请求 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
content){}    public byte[] getGeneralizedTimeBytes (byte[] generalizedTimeContent){}    public byte[] concatenateBytes (byte[] array1, byte[] array2){}    public byte[] getSequenceBytes (byte[] sequenceContents){}    public byte[] getTagAndLengthBytes (int tagType, int tagNumber, byte[]  tagContents){} }//ASN1DataTypes

getLengthBytes()

(在清单 2 中显示的)这个方法将一个整数值( length )作为参数。它生成一个该长度的 ASN.1 表示,并返回一个符合 ASN.1 长度格式的字节数组。

清单 2. getLengthBytes() 方法

public byte[] getLengthBytes(int length)    {      if (length < 0)        return null;      byte lengthBytes[];      if (length <= 127)      {        lengthBytes = new byte[1];        lengthBytes[0] = (byte)(length & 0xff);      }      else      {        int tempLength = length;        int bytesRequired = 2;        do        {          tempLength = tempLength / 256;          if (tempLength > 0)            bytesRequired ++;        }while (tempLength > 0);        lengthBytes = new byte[bytesRequired];        byte firstLengthByte = (byte) (bytesRequired -1);        firstLengthByte |= 0x80;        lengthBytes[0] = firstLengthByte;        int j = bytesRequired - 1;        for (int i=1; i < bytesRequired; i++) {          j--;          lengthBytes[i] = (byte)(length >>> (j*8) & 0xff);        }//for      }//else      return lengthBytes;    }//getLengthBytes

用Kerberos为J2ME应用程序上锁,第2部分 - 生成一个Kerberos票据请求(3)

时间:2011-08-05 IBM Faheem Khan

回想一下在本系列的 第一篇文章 中对表 2 的讨论,有两种表示字节长度的方法:单字节表示法和多 字节表示法。单字节长度表示法用于表示小于或者等于 127 的长度值,而当长度值大于 127 时使用多字 节长度表示法。

getLengthBytes() 方法首先检查长度值是否为负。如果为负,则只是返回 null,因为我不能处理负 值。

然后这个方法检查长度值是否小于或者等于 127。如果是,就需要使用单字节长度表示法。

注意在 J2ME 中一个整数是 4 字节数据,而单字节长度表示法只需要 1 个字节。如果长度参数是 0 到 127 之间(包括这个两数)的一个值,那么其字节表达就在 0x00000000 与 0x0000007f 之间(意味 着只有最低有效位字节包含有用的数据)。将这个整数造型为一个单字节时,只有最低有效位字节( 0x00 到 0x7f )会作为十六进制值拷贝到单字节数组。因此,如果长度值在 0 到 127 之间,那么我可 以只执行该长度与 0xff 之间的一个按位 AND 操作。这个操作会得到一个整数,它有效的最高 3 个字节 都将填入零。因此,我可以将按位操作的结果造型为一个字节,将这个字节放入一个单字节数组,并将这 个数组返回给调用应用程序。

如果长度值大于 127,那么我必须使用多字节长度表示法,它至少使用 2 字节数据。第一个字节表明 长度字节的字节数,后面是实际的长度字节(有关这种格式的详细解释请参阅 第一篇文章)。

如果长度值小于 256,那么就需要总共 2 个长度字节 ―― 1 个字节表明还有一个长度字节,1 个字 节包含

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