快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
的 DES-CBC 操作。

然后我通过向名为 KeyParameter 的类的构造函数传递一个 key 参数创建一个名为 kp 的对象。这个 KeyParameter 类也是 Bouncy Castle 的加密库的一部分。 kp 对象现在包装了密钥,所以在需要指定密 钥时我将传递这个对象。

下一步是创建另一个名为 iv 的对象。这个对象是另一个名为 ParameterWithIV 的 Bouncy Castle 类的实例。 ParameterWithIV 构造函数取两个参数。第一个是包装了密钥的 kp 对象。第二个是初始矢 量字节数组。因为我必须用密钥作为初始矢量,所以将密钥作为初始矢量字节数组传递。

iv 对象现在包装了密钥以及初始矢量,所以我在需要指定密钥和初始矢量时传递这个对象。

下一步是调用 cipher 对象的 init() 方法初始化这个对象。这个方法取两个参数。第一个是布尔类 型,在需要初始化一个密码进行加密时传递 true ,在希望进行解码时传递 false 。第二个是包装了密 钥和初始矢量的 iv 对象,

现在可以进行密文块链接了。我声明了一个名为 ivBytes 的字节数组,它将包含密码块链接每一步的 初始矢量字节。一个 for 循环将连续调用 cipher 对象的 processBlock() 方法。 processBlock() 方 法一次处理一个数据块。

processBlock() 方法取四个参数。第一个是输入数组( data ),第二个是字节数组中的偏移。 processBlock() 方法从这个偏移值开始处理块输入。第三个参数是输出数组的名字,第四个是输出数组 中的偏移。

for 循环调用 processBlock() 方法一次处理一个块。这个方法一次处理一块并将输出(加密的结果 )储存在 ivBytes 数组中。之后,我通过向 ParametersWithIV 构造函数传递 ivBytes 数组创建一个新 的 iv 对象( ParametersWithIV 类的一个实例)。然后我用新的 iv 对象重新初始化这个密码。于是循 环可以用与第一块的结果相等的初始矢量处理下一块。

循环退出时,我只是返回最后一个数据块的加密结果,这就是密钥生成过程第 9 步的结果。

生成 TGT 请求

到目前为止,我讨论了 ASN1DataTypes 类的底层方法并实现了利用用户的密码生成密钥的算法。现在 可以展示 KerberosClient 类如何利用这些底层细节了。

看一下清单 12,它显示了 getTicketResponse() 方法的实现。这个方法属于 KerberosClient 类。

getTicketResponse() 方法的基本目的是生成一个对 Kerberos 票据(一个 TGT 或者服务票据)的请 求、向 Kerberos 服务器发送票据请求、从服务器得到响应、并将响应返回给调用应用程序。在本文中, 我将只描述生成 TGT 请求的过程。本系列的下一篇文章将展示设置 KDC 服务器、向 KDC 发送请求、得 到响应并对它进行处理的步骤。

喘Kerberos葎J2ME哘喘殻會貧迄?及2何蛍 - 伏撹匯倖Kerberos同象萩箔(12)

扮寂:2011-08-05 IBM Faheem Khan

賠汽 12. getTicketResponse() 圭隈

import org.bouncycastle.crypto.digests.MD5Digest; public class KerberosClient extends ASN1DataTypes {    static long seed = System.currentTimeMillis();    private String kdcServiceName = "krbtgt";    private KerberosKey krbKey;    private String userName;    private String password;    private String realmName;    public KerberosClient(String userName, String password, String realmName)    {      krbKey = new KerberosKey(userName, password, realmName);      this.userName = userName;      this.password = password;      this.realmName = realmName;    }//KerberosClient     public byte[] getTicketResponse ()    {      byte pvno[] = 

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