# VishwaCTF 2022
## Strong Encryption
**Challenge**
This is our one of the most strong encryption algorithm. Try to decrypt the flag by tracing how it is encrypted.
**Solution**
For this challenge we were given the following code:
```php  576e78697e65445c4a7c8033766770357c3960377460357360703a6f6982452f12f4712f4c769a75b33cb995fa169056168939a8b0b28eafe0d724f18dc4a7
    $flag="";
    function encrypt($str,$enKey){
        $strHex='';        $Key='';        $rKey=69;        $tmpKey='';
        for($i=0;$i<strlen($enKey);$i++){            $Key.=ord($enKey[$i])+$rKey;            $tmpKey.=chr(ord($enKey[$i])+$rKey);        }    
        $rKeyHex=dechex($rKey);
        $enKeyHash = hash('sha256',$tmpKey);
        for ($i=0,$j=0; $i < strlen($str); $i++,$j++){            if($j==strlen($Key)){                $j=0;            }            $strHex .= dechex(ord($str[$i])+$Key[$j]);        }        $encTxt = $strHex.$rKeyHex.$enKeyHash;        return $encTxt;    }
    $encTxt = encrypt($flag, "VishwaCTF");
    echo $encTxt;
?> ```After a preliminary analysis of the code, we can see that the string to be decrypted consists of three parts:
```php$encTxt = $strHex.$rKeyHex.$enKeyHash;```After dividing the ciphertext into three parts, we get the following values:  
strHex:    576e78697e65445c4a7c8033766770357c3960377460357360703a6f6982  rKeyHex:   45  enKeyHash: 2f12f4712f4c769a75b33cb995fa169056168939a8b0b28eafe0d724f18dc4a7 
Then we can see, that the enKeyHash is not really needed - it is not used for the encryption of the message. The only thing we need to decrypt the ciphertext is 'Key', which can be easly recovered because we know the enKey - "VishwaCTF", and we see that the Key is created by adding 69 to the ord value of every letter of the enKey.
To get the flag I wrote this simple script in Python:
```pythonenKey = "VishwaCTF"Key = ''for character in enKey:    Key += str(ord(character)+69)Key += KeystrHex = '576e78697e65445c4a7c8033766770357c3960377460357360703a6f6982'strHex_divided = [strHex[i:i+2] for i in range(0, len(strHex), 2)]#  $strHex .= dechex(ord($str[$i])+$Key[$j]);flag = ''for i in range(len(strHex_divided)):    flag += chr(int(strHex_divided[i], 16)-int(Key[i]))print(flag)``````VishwaCTF{y0u_h4v3_4n_0p_m1nd}```