用 Kerberos 为 J2ME 应用程序上锁,第 3 部分: 建立与电子银行的安全通信(下)
2010-03-30 00:00:00 来源:WEB开发网可以说 清单 15 的 authorDigestAndEncrypt() 方法与前面讨论的 decryptAndVerifyDigest() 方法正好相反。 authorDigestAndEncrypt() 方法取 decryptAndVerifyDigest() 方法返回的纯文本数据作为输入。与此类似, authorDigestAndEncrypt() 方法返回的 EncryptedData 结构就是我作为输入传递给 decryptAndVerifyDigest() 方法的结构。
authorDigestAndEncrypt() 方法实现了以下策略:
首先,生成八个随机字节,它们构成了 confounder。
然后,声明一个名为 zeroedChecksum 的字节数组,它有十六个字节并初始化为零。这个有十六个零的数组作为一个全为零的摘要值。
第三,用其他的字节填入输入数据字节数组,以使数组中的字节数成为八的倍感数。编写了一个名为 getPaddedData() 的方法(如 清单 16所示),它取一个字节数组并在填充后返回这个数组。下面,链接(第 1 步得到的)confounder、(第 2 步得到的)全为零的摘要以及填充后的纯文本字节数组。
第四步是对第 3 步串接的字节数组计算 MD5 摘要值。
第五步是将摘要字节放到它们相应的位置上。第 5 的结果与第 3 步一样,只不过全为零的摘要现在换成了真正的摘要值。
现在调用 encrypt() 方法以加密第 5 步得到的字节数组。
然后,生成 etype 字段(特定于上下文的标签号 0)。
然后,调用 getOctetStringBytes() 方法将第 6 步得到的加密字节数组包装到 OCTET STRING 中。然后将 OCTET STRING 包装到 cipher 字段中(一个特定于上下文的标签号 2)。
最后,链接 etype 和 cipher 字段,将这个字符串包装到一个 SEQUENCE 中,并返回这个 SEQUENCE 。
清单 15. authorDigestAndEncrypt() 方法
更多精彩
赞助商链接