Permutationscode bei DES



  • Moin,

    muss mir grad den DES algorithmus anschauen - und vom prinzip her hab ich ihn auch verstanden.. aber der code dazu ist noch etwas mit fragezeichen voll...

    Eine allgemeine Frage hab ich zur Permutation - dort werden immer Bit-Masken angewandt bei DES mit z.B. 0x33333333 etc - welche Bedeutung haben diese (wie wird hier die Permutation unterteilt?) - warum muss die eigentliche Permutation 4x ausgeführt werden?

    z.B. bei der Permutation am Anfang des Algorithmus: left und right entsprechen den Daten 64Bit (von denen left den linken teil, also die linken 32bit enthält). work=0;

    PERMUTATION_INIT (left, work, right);
    
    #define PERMUTATION_INIT(left, temp, right)			  	\
    	PERMUTATION(left, temp, right, 4, 0x0F0F0F0F);	 	\
    	PERMUTATION(left, temp, right, 16, 0x0000FFFF);		\
    	PERMUTATION(left, temp, right, 2, 0x33333333);	  	\
    	PERMUTATION(left, temp, right, 8, 0x00FF00FF);	   	\
    	right = (right << 1) | (right >> 31); 			   	\
    	temp = (left ^ right) & 0xAAAAAAAA; 			  	\
    	right ^= temp; 									  	\
    	left ^= temp; 									  	\
    	left = (left << 1) | (left >> 31);
    

    Auch das Pattern 0xAAAAAAAA ist mir noch unklar. Die XOR Verknüpfung von left / right mit temp hebt die XOR Verknüpfung von der Permutation (define PERMUTATION) wieder auf?

    #define PERMUTATION(a, temp, b, offset, mask) 			\
    	temp = ((a >> offset) ^ b) & mask; 					\
    	b ^= temp; 											\
    	a ^= temp << offset;
    

    derHans


Anmelden zum Antworten