I stedet for at bruge Javas indbyggede kryptering taenkte jeg at jeg ville skrive det hele selv - saa det gjorde jeg - med AES som metode og det virkede helt fint med alle teststrings jeg forsogte og med alle passwords!
Dvs alle processerne skulle vaere korrekte (altsaa mixColumns, Subbytes, AddRoundkey) men da jeg nu forsoger at faa den til at laese en test fil, encrypte den og derefter decrypte den igen er jeg stodt paa problemer!
Jeg har skrevet selve krypteringen og dekrypteringen saa den bruger en 'short' 4x4 array og jeg tror maaske problemet ligger i at den selvfolgelig modtager bytes som input og sender ogsaa bytes ud som output.
Det jeg gor ved enkrypteringen er at indlaese en fil med FileInputStream og saa smide det i en array som jeg saa deler op i 16 byte stykker som jeg korer igennem en af gangen - og saa samme metode selvfolgelig med decrypting!
Nogle af linierne i denne test tekst fil er da ogsaa korrekte, men der synes at vaere nogle bytes der kan faa hele til at gaa galt!
Testinput: Dette er et test dokument 12345 som ogsaa bruger tegn, og linieskift!
Output efter encryption og decryption: gíá›p •ƒvsGZ„KÒ dokument 12345 ÿ´ÆuV.%Ë~Ê å€Òr tegn, og linieskift!
Som det kan ses gik forste og tredje krypterings runde galt mens anden og sidste gav det rgitge output...
Please er der nogen der kan hajelpe ville jeg vaere most grateful!
public class doDecrypt { private short [] key = new short[176]; private short [][] state = new short [4][4]; private int r = 0; private int TotalRounds = 10; private int kpos = 175; public byte [] outgoing = new byte[16];
public doDecrypt (byte [] inc, short [] inKey) { key = inKey; short[][] state = new short[4][4];
//Input data to state for (int c = 0; c < 4; c++) for (int r = 0; r < 4; r++) //state[r][c] = inc[r+(4*c)]; state[r][c] = alterByteToShort(inc[r+(4*c)]);
InvAddRoundKey(state); for (int i = 1; i < TotalRounds; i++) { InvShiftRows(state); InvSubBytes(state); InvAddRoundKey(state); InvMixColumns(state); } InvShiftRows(state); InvSubBytes(state); InvAddRoundKey(state);
//Need some sort of out! for (int k=0; k<4; k++) for (int l=0; l<4;l++) outgoing[l+(4*k)] = (byte)(state[l][k] & 0xff);
}
Det er fra decryption ^^
og her er selve filen der kalder decryption delen:
import java.io. *; public class deepControlDec { public deepControlDec(String Filename, String pass) { try { byte [] decodeArray = new byte[16]; short [] cryptKey = new short[16]; byte [] leftClean = new byte[16]; short [] finalKey = new short[176];
int numParts; int exParts;
if (pass.length() < 16) { int remain = 16 - pass.length(); for (int i = 0; i < remain; i++) { pass = pass + "\0"; } }
//Get the pass key for (int i = 0; i < 16; i++) { cryptKey[i] = (short)pass.charAt(i); }
getKey Generatedkey = new getKey(cryptKey, 16); finalKey = Generatedkey.out;
//Assign file File incFile = new File(Filename); FileInputStream inStream = new FileInputStream(incFile); //make the data array as long as the file! byte [] dataArray = new byte[inStream.available()];
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.