打印本文 打印本文 关闭窗口 关闭窗口
将Java加密技术同Windows结合起来
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2671  更新时间:2009/4/22 23:27:43  文章录入:mintao  责任编辑:mintao
钥匙(未实现)。

  RSA加密过程需要公钥;RSA解密需要私钥。如果我们有权使用Microsoft钥匙库中的RSA私钥——即,私钥是可以输出的——那么就没必要在Microsoft本地代码中执行RSA密码操作。但在有些情况下(例如,如果我们运用一个加密了的智能卡),我们就无权使用私钥。如果私钥是不能输出的,我们必须用Microsoft本地代码进行RSA解密。

  RSA密码在Windows本地代码中的实现很简单。本质的解密过程如下:

MSrsaDecrypt (jstring jpadalg,
jbyteArray jdata) {
CryptAcquireContext(
&hDecryptProv, alias, NULL,
PROV_RSA_FULL,0);
CryptGetUserKey(hDecryptProv,
AT_KEYEXCHANGE, &hDecryptKey);
CryptDecrypt(hDecryptKey, 0,
TRUE, 0, encryptblob, &ndata);
return decryptblob;
}

  加密几乎是一样的。因为RSA加密只需要公钥,加密模式可以在Java中执行。我选择在Windows本地代码中实现RSA加密和解密,因为这很容易。

  RSA密码是一个美国政府控制的加密算法。如果你想将RSA cipher provider同Sun JCE结合起来运用,你必须创建一个JAR文件,用一个DSA钥匙签署它,然后添加一个由Sun Microsystems签发的证书。为了方便,我已经把所有的mscrypto-class文件放在了一个单一的包中(com.boyter.mscrypto)。在签署的JAR文件中,只需要有MSRSACipherProvider.class和MSRSACipherFactoryImpl.class。用来创建和签名JAR文件的Windows命令是:

jar cvf mscrypto.jar com
jarsigner -keystore keystore
-storepass foobar mscrypto.jar
jcesigner

  你可以从“How to Implement a Provider for the Java Cryptography Extension 1.2.1.”(见资源)的第五步找到关于从Sun获取一个JCE代码签署的证书的说明。如果你想避免JCE的局限性(如美国政府的输出控制),你可以用一个clean-room式的实现环境(如BeeJCE)来代替JCE。我提供了一个称为msrsatest.java的程序,可以用来测试Microsoft 加密的RSA签名和RSA密码提供者。为此,你必须在Microsoft Windows中安装一个RSA私钥和证书。

  有根据的运用理由

  将Java安全特征同本地Microsoft Windows安全平台结合起来有许多好的理由,包括减少了的管理费用、CRL确认和与智能卡的兼容。将Java JCE同Windows证书和钥匙库结合起来的另一个理由是用来管理Java证书和钥匙库的Java工具很麻烦。Microsoft平台有一个更好的图形用户界面(GUI)用来管理Windows钥匙和证书库。你可以通过运行CERTMGR.EXT程序(与Windows平台SDK在一起)来启动GUI,或者你可以从IE窗口来启动:运用下拉菜单Tools | Internet Option,选择Content键,然后选择Certificates。

  在将Microsoft 加密支持的KeyManager和TrustManager用于JSSE时,你不会有什么问题。Microsoft 加密支持的RSA Signature Provider和RSA Cipher Provider也可以运行,但不能用于JSSE。

  资源

  The Factory design pattern:
  The SSL specification-JSSE (Java Secure Sockets Extension):
  Instructions for installing JSSE:
  "Build secure network applications with SSL and the JSSE API"
  Clean-room Java implementation of RSA signing and encryption:
  "How to Implement a Provider for the Java Cryptography Extension 1.2.1"
  BeeJCE, Virtual Unlimited's cleanroom implementation of JCE:
  Microsoft SDK Crypto API Reference:
  Java Certification Path API Programmer's Guide:
  Internet X.509 Public Key Infrastructure Certificate and CRL Profile:

  关于作者:

  Brian Boyter做过20年的军队情报军官,还曾是Air Force Information Warfare Center、Cisco Systems和Digital Defense的安全顾问。现在,他是Avaya Inc.的高级安全顾问。你可以通过bboyter@avaya.com联系他。

上一页  [1] [2] [3] 

打印本文 打印本文 关闭窗口 关闭窗口