2015-11-09 7 views
1

Я шифрую строку с использованием AES и хочу расшифровать ее на другом компьютере. Шифрование и дешифрование работают, если я выполняю на том же компьютере. Но для дешифрования на другом компьютере мой алгоритм шифрования генерирует «шифрованный шифр», который необходим для дешифрования с другой стороны вместе с ключом. Я не уверен, как передать шифр на другую сторону.AES-шифрование и дешифрование Java

вот мой код

public class AESCrypt { 

    static String plainText; 
    static byte[] plainBytesDecrypted = new byte[1024]; 
    static byte[] cipherBytes = new byte[1024]; 
    static SecretKey key; 
    static Cipher cipher; 

    public AESCrypt() throws NoSuchAlgorithmException { 
     KeyGenerator generator = KeyGenerator.getInstance("AES"); 

     generator.init(128); 
     key = generator.generateKey(); 

    } 

    public static byte[] encryption(String plainBytes) { 

     try { 
      Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

      cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC"); 
      cipher.init(Cipher.ENCRYPT_MODE, key); 
      cipherBytes = cipher.doFinal(plainBytes.getBytes()); 
      System.out.println("Encrypted data : " + new String(cipherBytes)); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return cipherBytes; 
    } 

    private static String bytesToHex(byte[] hash) { 

     return DatatypeConverter.printHexBinary(hash); 

    } 

    public static String Decryption() throws InvalidKeyException, IllegalBlockSizeException, InvalidAlgorithmParameterException, BadPaddingException { 

     cipher.init(Cipher.DECRYPT_MODE, key, cipher.getParameters()); 
     plainBytesDecrypted = cipher.doFinal(cipherBytes); 

     System.out.println("Decrypted data : " + new String(plainBytesDecrypted)); 

     return (new String(plainBytesDecrypted)); 
    } 
} 
+0

Вы слышали о [Криптографии с открытым ключом] (https://en.wikipedia.org/wiki/Public-key_cryptography)? –

ответ

0

У вас есть 3 варианта в целом:

  • жёстко шифра/режим/отступов, так что обе стороны знают, вы всегда используете один и тот же формат ,
  • Отправьте шифр/режим/дополнение перед секретными сообщениями, чтобы другая сторона знала, какой шифра инициализируется.
  • Используйте существующий протокол, который уже включает в себя все эти вещи для вас и делает это надежно. Например, вы можете отправлять свои данные в TLS-соединение.
Смежные вопросы