function my_decrypt($encrypt_string, $key) {
$dec = '' ;
$arr = explode( "\n" , wordwrap($encrypt_string, 2, "\n" , 1));
for ($i = 0; $i < count($arr); $i++) {
$dec .= chr(hexdec($arr[$i])) ^ $key;
}
return $dec;
}
* This source code was highlighted with Source Code Highlighter .
static void Main( string [] args)
{
while ( true ) {
Console .Write( "Input image url: " );
// i
var str = HttpUtility.ParseQueryString( new UriBuilder( Console .ReadLine()).Query)[ "i" ];
// HEX ,
var bytes = new byte [str.Length / 2];
var cnt = new Dictionary< byte , int >();
for ( var i = 0; i < bytes.Length; i++) {
bytes[i] = byte .Parse(str.Substring(i * 2, 2), NumberStyles.HexNumber);
if (!cnt.ContainsKey(bytes[i]))
cnt.Add(bytes[i], 0);
cnt[bytes[i]]++;
}
// , , 5
var avg = cnt.Keys.Average(p => ( decimal )p);
// ,
var nums = (bytes.Length + 1) / 3.5;
// , |
var candidates = cnt.Where(kvp => Math .Abs(kvp.Value - nums) <= 2).ToList().ConvertAll(p => p.Key);
// ,
candidates.Sort((a, b) => ( int )( Math .Abs(b - avg) - Math .Abs(a - avg)));
// «» xor
var key = ( byte )(candidates[0] ^ Encoding .ASCII.GetBytes( "|" )[0]);
// -xor'
for ( var i = 0; i < bytes.Length; i++)
bytes[i] ^= key;
//
var angles = Encoding .ASCII.GetString(bytes).Split( '|' ).ToList().ConvertAll(p => int .Parse(p));
Console .WriteLine( "Image at position {0} is upright" , angles.IndexOf(0));
}
}
* This source code was highlighted with Source Code Highlighter .
Source: https://habr.com/ru/post/74076/
All Articles