Я написал простую программу шифрования и дешифрования в java. И я использую "AES" algorithm
для шифрования и дешифрования. Он работает нормально, но в зашифрованных данных я получаю специальные символы, такие как "/","="
и т. Д.Шифровать данные без специального символа ("=")
Но я не хочу, чтобы специальные символы в зашифрованных данных были специально обработчиком «=». Потому что это вызывает проблему для моей дальнейшей обработки. Есть ли способ избежать специальных символов или одного оператора "="
в зашифрованных данных.
Я googled это, и я получил некоторое предложение, как, преобразовать данные в hashcode, поэтому hashcode шифрования не будет содержать специальный символ. Но в соответствии с предложениями, Hashcode шифрование не secret key
основе, мне нужно шифрование с помощью secret key
Как achive это?
Любая помощь будет определена. Благодаря
Ниже приведена программа, которую я написал в Java:
public class EncDec
{
private static final String ALGO = "AES";
private static final byte[] keyValue = "1234567891234567".getBytes();
public static void main(String[] args) throws Exception
{
String testData = "ABC";
String enc = encrypt(testData);
System.out.println("Encrypted data: "+enc);
String dec = decrypt(enc);
System.out.println("Decrypted data: "+enc);
}
public static String encrypt(String Data) throws Exception
{
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(Data.getBytes());
String encryptedValue = new BASE64Encoder().encode(encVal);
return encryptedValue;
}
public static String decrypt(String encryptedData) throws Exception
{
try{
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}catch(Exception e)
{
System.out.println("Something wrong..");
return "";
}
}
private static Key generateKey() throws Exception
{
Key key = new SecretKeySpec(keyValue, ALGO);
return key;
}
}
И я получил результат, как:
Зашифрованные данные: /ia3VXrqaaUls7fon4RBhQ==
Decrypted данные: ABC
.
знак равенства в конце является допустимым символом для кодирования Base64, который вы явно делаете в вашем коде.Как правило, ваш код должен иметь возможность обрабатывать любой тип String, независимо от содержимого. – mjuarez
В частности, это дополнение, когда у вас нет нескольких трех байтов в качестве входных данных. – chrylis
Я не понимаю, почему обфускация String должна быть проблемой для дальнейшей обработки. Не могли бы вы уточнить? – Juxhin