/**
   * Returns all phases of encoding and encrypting in a String
   *
   * @param msg String messge to be encrypted
   * @param exp BigInteger exponend
   * @param mod BigInteger modulo
   * @return String
   */
  public String getEnCrypted(String msg, BigInteger exp, BigInteger mod) {
    StringBuilder s = new StringBuilder();
    AlphabetNum alpha = new AlphabetNum();
    EncryptDecrypt encrypter = new EncryptDecrypt();

    // --------------------- enCoding-------------------------
    Integer[] numberMessage = enCode(msg);
    s.append(msg + "\n\n");
    s.append(alpha.getLetters() + "\n\n");
    s.append("Type 1 encoded text:\n");
    for (Integer integer : numberMessage) {
      s.append(integer.toString() + " ");
    }

    // ------------------------enCrypting-----------------------
    s.append("\n\nEncrypting:\n");
    for (int i = 0; i < numberMessage.length; i++) {
      CalculationPhase phase =
          new CalculationPhase(new BigInteger(numberMessage[i].toString()), exp);
      s.append(phase.getAll(mod));
      s.append("\n\n");
    }
    s.append("Encrypted: \n");
    BigInteger[] enCrypted = new BigInteger[numberMessage.length];
    String[] enCryptedLetters = new String[enCrypted.length];
    for (int i = 0; i < enCrypted.length; i++) {
      enCrypted[i] = (encrypter.encrypt(numberMessage[i], exp, mod));
      enCryptedLetters[i] = alpha.stringOfNumbersToLetters(enCrypted[i].toString());
      s.append(enCrypted[i] + " ");
    }

    // -------------------------to cryptotext----------------------
    s.append("\n\n" + alpha.getNumbers());
    s.append("\n\nCryptotext: \n");
    for (String string : enCryptedLetters) {
      s.append(string + " ");
    }
    return s.toString();
  }
  /**
   * Encodes and encrypts a message and returns cryptotext as a String.
   *
   * @param msg String messge to be encrypted
   * @param exp BigInteger exponend
   * @param mod BigInteger modulo
   * @return String
   */
  public String getEnCryptedSecure(String msg, BigInteger exp, BigInteger mod) {
    StringBuilder sB = new StringBuilder();
    AlphabetNum alpha = new AlphabetNum();
    EncryptDecrypt encrypter = new EncryptDecrypt();

    // --------------------- enCoding-------------------------
    Integer[] numberMessage = enCode(msg);

    // ------------------------enCrypting-----------------------
    BigInteger[] enCrypted = new BigInteger[numberMessage.length];
    String[] enCryptedLetters = new String[enCrypted.length];
    for (int i = 0; i < enCrypted.length; i++) {
      enCrypted[i] = (encrypter.encrypt(numberMessage[i], exp, mod));
      enCryptedLetters[i] = alpha.stringOfNumbersToLetters(enCrypted[i].toString());
    }

    // -------------------------to cryptotext----------------------
    for (String string : enCryptedLetters) {
      sB.append(string + " ");
    }
    return sB.toString().trim();
  }