我一直在尝试为在Google App Engine上运行的Google Web Toolkit应用程序实施RSA方案。 客户端加密和密钥管理是必需的,因此我正在使用gwt-crypto (gwt-crypto-2.3.0.jar)。 该文档的一部分已损坏,因此我遵循了Bouncy Castle的引用,例如此答案 。 我有一个静态方法来创建一个AsymmetricCipherKeyPair,它应该包含私钥和公钥,如下所示。
public static AsymmetricCipherKeyPair getRsaKeyPair() {
RSAKeyPairGenerator keyPairGenerator = new RSAKeyPairGenerator();
RSAKeyGenerationParameters param = new RSAKeyGenerationParameters(RSA_PUBLIC_EXPONENT_FERMAT, SECURE_RANDOM, RSA_STRENGTH, RSA_CERTAINTY);
keyPairGenerator.init(param);
/* RSAKeyPairGenerator.generateKeyPair() freezes on Google App Engine */
return keyPairGenerator.generateKeyPair();
}
当我在localhost中运行开发模式时,它运行良好(我相信是从Eclipse和Jetty进行的)。 但是,当我将其部署到Google App Engine时,它会冻结在keyPairGenerator.generateKeyPair()
调用上。 我正在使用以下参数。 我试图scalling向下RSA_STRENGTH
为256〜1024和RSA_CERTAINTY
从1到80。我还试图RSA_PUBLIC_EXPONENT_FERMAT
任3(F0, 0x3
)或65537(F4, 0x10001
)
private static final int RSA_STRENGTH = 1024;
private static final int RSA_CERTAINTY = 4;
private static final BigInteger RSA_PUBLIC_EXPONENT_FERMAT = new BigInteger("3", 16);
private static final SecureRandom SECURE_RANDOM = SecureRandom.getInstance("SHA1PRNG");
我尝试了多种浏览器,但他们总是说脚本已停止响应或花费了太长时间,如果我尝试继续执行,它们将冻结或崩溃。 通常,在服务器端,控制台或Google App Engine环境上没有其他错误。 我不知道该怎么办,因为它可以在本地主机上运行时在浏览器上完美且快速地运行,但是在部署到云中后我无法使其正常运行,而且我不知道如何调试它。 谁能帮我? 可能是Google App Engine结构的问题吗? 还是某种资源限制?
我也在使用SmartGWT,不确定是否重要。 我真的被困在这里。
提前致谢。
前段时间,我编写了一个gwt应用程序来执行相同的操作。 在对gwt-crypto进行了长时间的黑客攻击之后,我完成了使用外部js解决方案的工作。
gwt-crypto密钥生成非常慢,从逻辑上讲,它运行在Java上,因此可以在dev模式下运行,但是在编译代码时,BigInteger的执行效果确实很差。
阅读我对以下问题的回答: 如何在我的gwt应用程序中导入java.security。* 。