code: public static final byte[] crypt(byte salt[], byte original[]) {
      byte result[] = new byte[13];
  
      byte byteZero = salt[0];
      byte byteOne = salt[1];
  
      result[0] = byteZero;
      result[1] = byteOne;
  
      int Eswap0 = con_salt[byteZero];
      int Eswap1 = con_salt[byteOne] << 4;
  
      byte key[] = new byte[8];
  
      for (int i = 0; i < key.length; i++) {
        key[i] = (byte) 0;
      }
  
      for (int i = 0; i < key.length && i < original.length; i++) {
        int iChar = (int) original[i];
  
        key[i] = (byte) (iChar << 1);
      }
  
      int schedule[] = des_set_key(key);
      int out[] = body(schedule, Eswap0, Eswap1);
  
      byte b[] = new byte[9];
  
      intToFourBytes(out[0], b, 0);
      intToFourBytes(out[1], b, 4);
      b[8] = 0;
  
      for (int i = 2, y = 0, u = 0x80; i < 13; i++) {
        for (int j = 0, c = 0; j < 6; j++) {
          c <<= 1;
  
          if (((int) b[y] & u) != 0) {
            c |= 1;
          }
  
          u >>>= 1;
  
          if (u == 0) {
            y++;
            u = 0x80;
          }
          result[i] = cov_2byte[c];
        }
      }
      return result;
    }
docs: <P>Encrypt a password given the cleartext password and a "salt".</P>
  @param salt A two-character string representing the salt used to
  iterate the encryption engine in lots of different ways. If you
  are generating a new encryption then this value should be
  randomised.
  @param original The password to be encrypted.
  @return A string consisting of the 2-character salt followed by the
  encrypted password.