Я пытаюсь расшифровать строку RSA с моей серверной части. При запуске кода с локального сервера он отлично работает, , но при развертывании приложения в GAE метод возвращает пустую строку (но не null).RSA в Google App Engine
(входная строка представляет собой BASE64 представление двоичных данных дешифровать)
Это мой код:
private static String decrypt(String pwd) {
byte[] input = Base64.decode(pwd);
try {
rsaCipher = Cipher.getInstance("RSA/ECB/NoPadding");
} catch (NoSuchAlgorithmException e) {
return null;
} catch (NoSuchPaddingException e) {
return null;
}
KeyFactory keyFactory;
try {
keyFactory = KeyFactory.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
return null;
}
String modString = "*********";
String privateExponentString = "*********";
RSAPrivateKeySpec prvKeySpec = new RSAPrivateKeySpec(new BigInteger(modString), new BigInteger(privateExponentString));
RSAPrivateKey prvKey;
try {
prvKey = (RSAPrivateKey) keyFactory.generatePrivate(prvKeySpec);
} catch (InvalidKeySpecException e) {
return null;
}
try {
rsaCipher.init(Cipher.DECRYPT_MODE, prvKey);
} catch (InvalidKeyException e) {
return null;
}
byte[] cipherText;
try {
cipherText = rsaCipher.doFinal(input);
} catch (IllegalBlockSizeException e) {
return null;
} catch (BadPaddingException e) {
return null;
}
return new String(cipherText);
}
Я сделал немного отладки на стороне сервера во время работы в удаленном режиме. я узнал, что функции:
rsaCipher.doFinal(input);
возвращает массив байт, а каждый элемент содержит «0».
Пожалуйста Advice,
Спасибо и наилучшими пожеланиями, Ноам Коэн
Прежде всего, вы не должны быть игнорирование исключений (ловить их и возвращать null). Вы должны хотя бы зарегистрировать ошибку, чтобы узнать, что на самом деле произошло. –
Спасибо. В версии кода, которую я загрузил, я удалил код обработки ошибок, чтобы сделать код более понятным и добавил «return null» только для компилятора, чтобы принять код. – thecohenoam