public static String crypt()

in src/main/java/org/apache/commons/codec/digest/UnixCrypt.java [248:297]


    public static String crypt(final byte[] original, String salt) {
        if (salt == null) {
            salt = B64.getRandomSalt(2);
        } else if (!CRYPT_SALT_PATTERN.matcher(salt).matches()) {
            throw new IllegalArgumentException("Invalid salt value: " + salt);
        }

        final StringBuilder buffer = new StringBuilder("             ");
        final char charZero = salt.charAt(0);
        final char charOne = salt.charAt(1);
        buffer.setCharAt(0, charZero);
        buffer.setCharAt(1, charOne);
        final int eSwap0 = CON_SALT[charZero];
        final int eSwap1 = CON_SALT[charOne] << 4;
        final byte[] key = new byte[8];
        Arrays.fill(key, (byte) 0);

        final int originalLength = original.length;
        for (int i = 0; i < key.length && i < originalLength; i++) {
            final int iChar = original[i];
            key[i] = (byte) (iChar << 1);
        }

        final int[] schedule = desSetKey(key);
        final int[] out = body(schedule, eSwap0, eSwap1);
        final byte[] b = new byte[9];
        intToFourBytes(out[0], b, 0);
        intToFourBytes(out[1], b, 4);
        b[8] = 0;
        int i = 2;
        int y = 0;
        int u = 128;
        for (; i < 13; i++) {
            int j = 0;
            int c = 0;
            for (; j < 6; j++) {
                c <<= 1;
                if ((b[y] & u) != 0) {
                    c |= 0x1;
                }
                u >>>= 1;
                if (u == 0) {
                    y++;
                    u = 128;
                }
                buffer.setCharAt(i, (char) COV2CHAR[c]);
            }
        }
        return buffer.toString();
    }