Я несколько дней пытался реализовать схему RSA для приложения Google Web Toolkit, работающего под Google App Engine. Клиентское шифрование и управление ключами - это требование, поэтому я использую 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()
. Я использую параметры ниже. Я пробовал масштабировать 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 была ужасно медленной, логически она работает в dev-mode, потому что она запускает java, но когда код скомпилирован, BigInteger выполняет очень плохо.
Прочтите мой ответ на вопрос: как импортировать java.security. * В мое приложение gwt.