1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

Help in code to crack a symantic key for a TEA algorithm

Discussion in 'C' started by elsa87, Oct 10, 2008.

  1. elsa87

    elsa87 New Member

    hi everyone..i need to crack a symmetric key by implementing a method called CrackSymmetricKey
    I must use the TEA encryption algorithm below:
    Code:
    union myMsgType{
    		unsigned long textConverted[2];
    		char text[9];
    };
    
    class TEA_Algorithm  
    {
    public:
    	void CrackSymmetricKey(union myMsgType plaintext, union myMsgType ciphertext);
    	void Decrypt(unsigned long k[], unsigned long ciphertext[], unsigned long plaintext[]);
    	void Encrypt(unsigned long k[], unsigned long plaintext[], unsigned long ciphertext[]);
    	TEA_Algorithm() {};
    	virtual ~TEA_Algorithm() {};
    
    };
    
    
    As input, im given the following ciphertext and i need to find the secret key that has been used to obtain this ciphertext, and hence, deduce the original plaintext.
    // myCiphertext.textConverted[0] = 2022673309;
    // myCiphertext.textConverted[1] = 3810199360;

    Code:
    #include "stdafx.h" 
    #include <iostream>
    #include <string.h>
    using namespace std;
    
    #include "TEA_Algorithm.h"
    
    void TEA_Algorithm::Encrypt(unsigned long k[], unsigned long plaintext[], unsigned long ciphertext[])
    {
    unsigned long y = plaintext[0], z = plaintext[1];
    	unsigned long delta = 0x9e3779b9, sum = 0; int n;
    	for (n= 0; n < 32; n++) {
    		sum += delta;
    		y += ((z << 4) + k[0]) ^ (z+sum) ^ ((z >> 5) + k[1]);        
    		z += ((y << 4) + k[2]) ^ (y+sum) ^ ((y >> 5) + k[3]);        
    	}
    	ciphertext[0] = y;  ciphertext[1] = z; 
    
    }
    
    void TEA_Algorithm::Decrypt(unsigned long k[], unsigned long ciphertext[], unsigned long plaintext[])
    {
    unsigned long y = ciphertext[0], z = ciphertext[1];
    	unsigned long delta = 0x9e3779b9, sum = delta << 5;  int n;
    	for (n= 0; n < 32; n++) {
    		z -= ((y << 4) + k[2]) ^ (y + sum) ^ ((y >> 5) + k[3]);
    		y -= ((z << 4) + k[0]) ^ (z + sum) ^ ((z >> 5) + k[1]);
    		sum -= delta;
    	}
    	plaintext[0] = y; plaintext[1] = z;
    }
    
    void TEA_Algorithm::CrackSymmetricKey(union myMsgType plaintext, union myMsgType ciphertext)
    {
    /* 
     what should i write here if this is what's given:
    	plaintext:= security
    	ciphertext: 	
    		myCiphertext.textConverted[0] = 2022673309;
    		myCiphertext.textConverted[1] = 3810199360;
    
    	additional information: key[0]=key[1]=k[2]=k[3]
     and you're asked to determine what is the secret key that 
     has been used to encrypt this plaintext.
    */
    
    }
    
    
    plz help..i know i should make a loop inside but im very weak in programming
     

Share This Page