WEB开发网
开发学院软件开发Java 用 Kerberos 为 J2ME 应用程序上锁,第 3 部分: 建... 阅读

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

 2010-03-30 00:00:00 来源:WEB开发网   
核心提示: 注意, getIntegerValue() 方法设计为只处理正的 integer 值,用 Kerberos 为 J2ME 应用程序上锁,第 3 部分: 建立与电子银行的安全通信(上)(4), ASN.1 以最高有效位优先(most-significant-byte-first)的序列存储一个正的

注意, 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() 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Kerberos JME 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接