import java.security.*; import java.util.*; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; class VaultDoor8 { public static void main(String args[]) { Scanner b = new Scanner(System.in); System.out.print("Enter vault password: "); String c = b.next(); String f = c.substring(8, c.length() - 1); VaultDoor8 a = new VaultDoor8(); if (a.checkPassword(f)) { System.out.println("Access granted."); } else { System.out.println("Access denied!"); } } /* Scramble a password by transposing pairs of bits. */ public char[] scramble(String password) { char[] a = password.toCharArray(); for (int b = 0; b < a.length; b++) { char c = a[b]; c = switchBits(c, 1, 2); c = switchBits(c, 0, 3); /* c = switchBits(c,14,3); c = switchBits(c, 2, 0); */ c = switchBits(c, 5, 6); c = switchBits(c, 4, 7); c = switchBits(c, 0, 1); /* d = switchBits(d, 4, 5); e = switchBits(e, 5, 6); */ c = switchBits(c, 3, 4); c = switchBits(c, 2, 5); c = switchBits(c, 6, 7); a[b] = c; } return a; } /* Move the bit in position p1 to position p2, and move the bit that was in position p2 to position p1. Precondition: p1 < p2 */ public char switchBits(char c, int p1, int p2) { char mask1 = (char) (1 << p1); char mask2 = (char) (1 << p2); /* char mask3 = (char)(1<> shift) | rest); return result; } public boolean checkPassword(String password) { char[] scrambled = scramble(password); char[] expected = {0xF4, 0xC0, 0x97, 0xF0, 0x77, 0x97, 0xC0, 0xE4, 0xF0, 0x77, 0xA4, 0xD0, 0xC5, 0x77, 0xF4, 0x86, 0xD0, 0xA5, 0x45, 0x96, 0x27, 0xB5, 0x77, 0xC1, 0xC0, 0x95, 0x94, 0x94, 0xC1, 0xD1, 0xE1, 0xF1}; return Arrays.equals(scrambled, expected); } }