快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
edBytesLength;       } catch (Exception e) {        e.printStackTrace();       }//catch     }     return plainData;    }//decrypt()

getMD5DigestValue()

清单 11 中显示的 getMD5DigestValue() 方法取一个输入数据字节数组,并返回一个用输入数据计算 的 MD5 摘要值。

Bouncy Castle 加密库在一个名为 MD5Digest 的类中包含 MD5 摘要支持。使用 MD5Digest 类进行摘 要计算需要四步:

首先,实例化一个 MD5Digest 对象。

然后,调用 MD5Digest 对象的 update() 方法,在调用同时传递要摘要的数据。

然后,实例化一个用来包含 MD5 摘要值输出字节数组。

最后,调用 MD5Digest 对象的 doFinal() 方法,同时传递输出字节数组。doFinal() 方法计算摘要 值并将它放到输出字节数组中。

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

时间:2011-08-05 IBM Faheem Khan

清单 11. getMD5DigestValue() 方法

public byte[] getMD5DigestValue (byte[] data)    {     MD5Digest digest = new MD5Digest();     digest.update (data, 0, data.length);     byte digestValue[] = new byte[digest.getDigestSize()];     digest.doFinal(digestValue, 0);     return digestValue;    }

decryptAndVerifyDigest()

回想一下在 第一篇文章图 3 和清单 2 中,KDC 服务器的票据响应包含一个名为 enc-part 的字段, 它包装了一个名为 EncryptedData 的加密的数据结构。就像在第一篇文章的 图 3 的说明中描述的那样 ,EncryptedData 结构由三个字段组成。

清单 12 中显示的 decryptAndVerifyDigest() 方法取一个 EncryptedData 结构(实质上就是 enc- part 字段的内容)和一个解密密钥作为参数,并返回 EncryptedData 结构的纯文本表示。加密过程步骤 如下:

第 1 步:注意在 第一篇文章的清单 2 中,EncryptedData 结构实际上是 etype、kvno 和 cipher 字段的一个 SEQUENCE 。因此,第一步是检查输入字节数组是否是一个 SEQUENCE 。为此调用 isSequence() 方法。

第 2 步:如果输入字节数组是一个 SEQUENCE ,那么需要解析这个 SEQUENCE 并提取出其内容。调用 getContents() 方法以提取出 SEQUENCE 内容。

在 SEQUENCE 内容中,感兴趣的是第一个字段( etype ,特定于上下文的标签号 0),它表明了加密 类型。使用了 getASN1Structure() 方法调用以从 SEQUENCE 内容中提取 etype 字段。

第 3 步:调用 getContents() 方法以提取 etype 字段的内容,这是一个 ASN.1 INTEGER 。再次调 用 getContents() 方法以提取 INTEGER 的内容。然后将 INTEGER 内容传递给 getIntegerValue() 方法 ,这个方法返回 J2ME int 格式的 INETGER 内容。将 J2ME int 值存储为一个名为 eTypeValue 的变量 。eTypeValue int 指定在生成 EncryptedData 结构时使用的加密类型。

第 4 步:回想一下 Kerberos 客户机只支持一种加密类型 ―― DES-CBC ―― 它的标识号为 3。因 此,我检查 eTypeValue 是否为 3。如果它不是 3(即服务器使用了非 DES-CBC 的加密算法), 那么 Kerberos 客户机就不能处理这一过程。

第 5 步:下一步是从 EncryptedDataSEQUENCE 内容中提取第三个字段( cipher ,特定于上下文的 标签号 2)。调用 getASN1Structure() 方法以完成这项任务。

第 6 步:下一步,调用 getContents() 方法提取 cipher 字段的内容。cipher 字段的内容是一个 ASN.1 OCTET STRING 。还需要再调用 getContents() 方法,以提取 OCTET STRING 的内容 。

第 7 步: OCTET STRING 内容是加密的,因此需要用前面讨论的 decrypt() 方法解密。

第 8 步:

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