Я пытаюсь достичь этого с помощью логики шифрования /дешифрования AES, но я не могу достичь этого, так как каждый раз, когда я преобразую простой текст в зашифрованный формат, чтобы он был сохранен в листе Excel, он приводит к Каждый раз другая зашифрованная строка, так что я не могу расшифровать ее обратно к оригиналу, я хочу, чтобы та же статическая строка /текст мой зашифрованный текст AES также должен быть статичным.
Я знаю, даже если моя зашифрованная строка Является ли динамика, я могу преобразовать его обратно в расшифрованное формат, но для моего случая я хочу, чтобы мой зашифрованный текст также должен оставаться статичным.
Как я могу это достичь? < /p>
ex. Если мой простой текст: «Это вопрос». Моя зашифрованная строка отличается каждый раз, как ниже < /p>
enter
Это вопрос
зашифрованные данные: mfsue8jgwlcjqtibzm0hlvvddxpngsg /o7n60joh +Ozgg ==
Decrypted Data: Это вопрос < /p>
enter
Это вопрос
зашифрованные данные: fdbz3cgs4nphk14fw8me4dam4lvzdrk47wumsriuve+juq ==
Расшифрованные данные: это вопрос < /p>
См. Зашифрованные данные различаются каждый раз. Я хочу, чтобы это было статичным < /p>
Классы, которые я использую, как ниже (обратите внимание, это не мои точные классы, но они реализуют ту же логику, которую я использовал. Эти примеры классов Может иметь некоторые не используемые переменные и методы, я упоминал только для справки)
Код: Выделить всё
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
public class Method {
private static SecretKey key;
private final int KEY_SIZE = 128;
private final int DATA_LENGTH = 128;
private Cipher encryptionCipher;
/*
* public void init() throws Exception { KeyGenerator keyGenerator =
* KeyGenerator.getInstance("AES"); keyGenerator.init(KEY_SIZE); key =
* keyGenerator.generateKey();
*
*
* }
*/
// String to Key
public static void getKeyFromPassword(String toEnc, String salt) throws
NoSuchAlgorithmException, InvalidKeySpecException { SecretKeyFactory factory
= SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); KeySpec spec = new
PBEKeySpec(toEnc.toCharArray(), salt.getBytes(), 65536, 128); SecretKey
originalKey = new SecretKeySpec(factory.generateSecret(spec).getEncoded(),"AES");
key= originalKey; }
/*
* public static void convertStringToSecretKeyto(String string) {
*
*
* byte[] bytesEncoded = Base64.getEncoder().encode(string.getBytes()); byte[]
* decodedKey = Base64.getDecoder().decode(string); key = new
* SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
* System.out.println(bytesEncoded); System.out.println(decodedKey);
*
* }
*/
public String encrypt(String data) throws Exception {
byte[] dataInBytes = data.getBytes();
encryptionCipher = Cipher.getInstance("AES/GCM/NoPadding");
encryptionCipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = encryptionCipher.doFinal(dataInBytes);
return encode(encryptedBytes);
}
public String decrypt(String encryptedData) throws Exception {
byte[] dataInBytes = decode(encryptedData);
Cipher decryptionCipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec = new GCMParameterSpec(DATA_LENGTH,
encryptionCipher.getIV());
decryptionCipher.init(Cipher.DECRYPT_MODE, key, spec);
byte[] decryptedBytes = decryptionCipher.doFinal(dataInBytes);
return new String(decryptedBytes);
}
private String encode(byte[] data) {
return Base64.getEncoder().encodeToString(data);
}
private byte[] decode(String data) {
return Base64.getDecoder().decode(data);
}
}
< /code>
main.class
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import java.util.Base64;
import java.util.Scanner;
public class Cypher {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Method aes_encryption = new Method();
// aes_encryption.init();
Method.getKeyFromPassword("Texty text","Salty salt");
System.out.println("Enter");
Scanner sc= new Scanner(System.in);
String s= sc.nextLine();
String encryptedData = aes_encryption.encrypt(s);
String decryptedData = aes_encryption.decrypt(encryptedData);
System.out.println("Encrypted Data : " + encryptedData);
System.out.println("Decrypted Data : " + decryptedData);
} catch (Exception ignored) {
}
}
Подробнее здесь: https://stackoverflow.com/questions/735 ... sult-in-si