快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
解密的数据字节数组由三部分组成。第一部分由前八位组成,它包含一个称为 confounder 的随机数。confounder 字节没有意义,它们只是帮助增加黑客的攻击的难度。

解密的数据的第 9 到第 24 个字节构成了第二部分,它包含一个 16 字节的 MD5 摘要值。这个摘要 值是对整个解密的数据 ―― 其中16 个摘要字节(第二部分)是用零填充的 ―― 计算的。

第三部分是要得到实际纯文本数据。

因为第八步进行完整性检查,所以必须将解密的数据的第 9 到第 24 个字节用零填充,对整个数据计 算一个 MD5 摘要值,并将摘要值与第二部分(第 9 到第 24 个字节)进行匹配。如果两个摘要值匹配, 那么消息的完整性就得到验证。

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

时间:2011-08-05 IBM Faheem Khan

第 9 步:如果通过了完整性检查,那么就返回解密的数据的第三部分(第 25 个字节到结束)。

清单 12. decryptAndVerifyDigest() 方法

public byte[] decryptAndVerifyDigest (byte[] encryptedData, byte[]  decryptionKey)    {     /****** Step 1: ******/     if (isSequence(encryptedData[0])) {       /****** Step 2: ******/       byte[] eType = getASN1Structure(getContents(encryptedData),                   CONTEXT_SPECIFIC, 0);       if (eType != null) {        /****** Step 3: ******/        int eTypeValue = getIntegerValue(getContents(getContents(eType)));        /****** Step 4: ******/        if ( eTypeValue == 3) {          /****** Step 5: ******/          byte[] cipher = getASN1Structure(getContents(encryptedData),                   CONTEXT_SPECIFIC, 2);          /****** Step 6: ******/          byte[] cipherText = getContents(getContents(cipher));          if (cipherText != null) {           /****** Step 7: ******/           byte[] plainData = decrypt(decryptionKey,                      cipherText, null);           /****** Step 8: ******/           int data_offset = 24;           byte[] cipherCksum = new byte [16];           for (int i=8; i < data_offset; i++)             cipherCksum[i-8] = plainData[i];           for (int j=8; j < data_offset; j++)             plainData[j] = (byte) 0x00;           byte[] digestBytes = getMD5DigestValue(plainData);           for (int x =0; x < cipherCksum.length; x++) {             if (!(cipherCksum[x] == digestBytes[x]))              return null;           }           byte[] decryptedAndVerifiedData = new byte[plainData.length -  data_offset];           /****** Step 9: ******/           for (int i=0; i < decryptedAndVerifiedData.length; i++)             decryptedAndVerifiedData[i] = plainData[i+data_offset];           return decryptedAndVerifiedData;          } else           return 

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