У меня есть система для шифрования текстов, но я пытался создать систему для расшифровки текстов, и она не работает. Система:
инициализировать зашифрованный текст в byte[]
инициализировать расшифрованный текст зашифрованным текстом
Он просто возвращает зашифрованный текст, но не расшифрованный текст. У вас есть идея для отладки этого?
Заранее спасибо.
byte[] getEncrypt(String text) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException
{
String key = "Bép12345Taruy'(";
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(text.getBytes());
return encrypted;
}
String getDecrypt(String text) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException
{
String key = "Bép12345Taruy'(";
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(text.getBytes());
cipher.init(Cipher.DECRYPT_MODE, aesKey);
String decrypted = new String(cipher.doFinal(encrypted));
return decrypted;
}
Одна вещь неверна: ваш метод getEncrypt
возвращает строку, но зашифрованный текст состоит из байтов, которые не могут быть сохранены в строке. Не делайте new String(encrypted)
. Сделайте так, чтобы метод возвращал byte[]
вместо String
. Строка не является подходящим контейнером для произвольных байтов.
может быть, byte[] в строку Base64. Я думаю, что это правильная практика, если я ошибаюсь.
Вы шифруете зашифрованный текст в своем методе getDecrypt(...)
. Или вы хотите зашифровать и расшифровать его снова одним методом?
Одним из решений будет следующий код:
package test;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
public class Test2{
public static void main(String[] args) throws InvalidKeyException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException {
System.out.println(new String(getEncrypt("test")));
System.out.println(new String(getDecrypt(getEncrypt("test"))));
}
public static byte[] getEncrypt(String text) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
String key = "Bép12345Taruy'(";
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(text.getBytes());
return encrypted;
}
public static byte [] getDecrypt(byte[] encrypted) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
String key = "Bép12345Taruy'(";
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, aesKey);
return cipher.doFinal(encrypted);
}
}
Выход:
�'���+~�@��@w
test
Большое спасибо за Вашу помощь !
Я использую джасыпт для шифрования паролей. Метод очень прост.
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword("some_Password_Maybe_generated_At_random");
...
String myEncryptedText = textEncryptor.encrypt(myText);
...
String plainText = textEncryptor.decrypt(myEncryptedText);
Обычно я не помещаю пароль в источник, а сохраняю его в файле в домашнем каталоге пользователя.
Шифрование настолько надежно, насколько безопасен и приватен домашний каталог пользователя.
Этот метод хорош тем, что возвращает строку, которую можно поместить в конфигурационный файл.
Как я уже говорил, это не безопасно для очень, оно будет защищать зашифрованный текст до тех пор, пока пароль шифрования безопасен.
Также поделитесь кодом, где вы используете эти функции.