In any interactive website, you can’t get around taking care of the security side. Especially when it’s a leading Turkish e-learning platform supplying internationally recognised accreditations. And internet security is all about very, very large numbers. The current standard of security uses 128 bit numbers, which look like this in bits:

11000111010001001111101001000001011110011011001001000100110101001000110101001011000001111010001011000100000010111001110101100101

In Turkish, binary code is easy, because, while the Turkish for ‘binary’ is İkili, the Turkish for bit is just bit. The normal, decimal notation for the above binary number is:

264,874,523,137,473,303,357,471,584,988,705,824,101

In English, you would say:
264 undecillion 874 decillion 523 nonillion 137 octillion 473 septillion 303 sextillion 357 quintillion 471 quadrillion 584 trillion 988 billion 705 million 824 thousand 101.
In Turkish, this is:
264 undesilyon 874 desilyon 523 nonilyon 137 oktilyon 473 septilyon  303 seksilyon 357 kentilyon 471 katrilyon 584 trilyon 988 milyar 705 milyon 824 bin 101.

If you compare the two, you will notice that after a billion, the Turkish just becomes a phonetic writing of English. So if you thought that Turkish language is difficult, be reassured that when it comes to what really matters in business (the big numbers), being familiar with basic Turkish pronunciation and writing is more than enough!

“Why does internet security need such large numbers?” you might wonder. The astronomically large numbers are used to prevent a third person from ‘guessing’ a numerical key that gives access to sensitive details. The numbers need to be large enough that even the fast computer possible wouldn’t be able to generate enough guesses to make a correct guess within the lifetime of a security key.

In websites, these big numbers are used, for instance, for Unique Identification Numbers (UID). A UID is much safer to prove that you are you, than to keep sending your user name and password every time you interact with the website. Furthermore, UIDs make it possible to keep logged in after closing your browser or app, without storing your password inside your computer or mobile device .

The big numbers also bring some extra challenges though: First of all, they are quite long, requiring more storage space and bandwidth. And secondly, the usual mathematical functions of a computer cannot deal with such large numbers.

The length of the numbers can be reduced by using a more information-dense representation. This is useful to reduce their length when used inside a URL reference. As you can see above, the conversion to a decimal number already reduced the length from 128 to 39. A common number type used in security software is the hexadecimal representation, where 6 extra values (‘a,b,c,d,e,f’) are counted after to the numbers 0 to 9. This makes our secure number above look like this string of only 32 characters:

c744fa4179b244d48d4b07a2c40b9d65

In Turkish, that’s easy again, because the Turkish for hexidecimal is heksadesimal.

But we don’t have to stop here. We can make the string even shorter by adding more possible characters. Why not use all 62 alphanumeric characters ‘0123456789abcdefghijklmnopqrstuwvxyzABCDEFGHIJKLMNOPQRSTUWVXYZ’?

Representing our number in alphanumeric characters reduces it to only 22 characters:

640ZKfPtQpDfcLRAhThnIp

And it is still easy in Turkish, since the Turkish for alphanumeric is alfanümerik.

However, the complicated part is now for the computer, because random number generators usually provide a hexadecimal output. The computer then needs to convert this to alfanümerik. Usually, this is done by repeatedly dividing the number through 62 to get each subsequent alfanümerik character. Unfortunately, the software on an internet server can only calculate with 32 bit numbers, or 64 bit for some modern servers. A 128 bit number is simply too big for the computer to divide. Splitting it up into smaller blocks doesn’t work either, because 62 is not a power of two.

If you recollect your childhood, though, you might realise that there is a simple way to divide a number of any length, called the ‘long division’. In Turkish it is called uzun bölme. So all we needed to do to get alfanümerik security numbers is to apply the uzun bölme method to the heksadesimal string.

You could easily do this on a very long piece of paper:

LongDivision

Here 3E is the heksadesimal notation of 62. I have to admit for this example I cheated, since I find it quite difficult to calculate with even small heksadesimal numbers. Also, I didn’t finish it all the way down. A meticulous job like this is perfect to do with a computer, though. The final remainder of this division, all the way down, would be 19 (which is 25 in decimal). This gives us a ‘p’ as the first (right most) character of the alfanümerik notation, since ‘p’ is the 26th number in the row of  alfanümerik  characters (counting starts with 0). To get the next alfanümerik character ‘I’, you just do another uzun bölme to divide the answer ‘336ca3adccd32a896ec90a3a852c49a’ again by ‘3e’. And so on, until you get an answer smaller than ‘3e’.

For those who might also want to convert their own big hex numbers, below is the piece of PHP programming code that does the conversion using long division. It works on a hex string of any length and can easily be adapted to convert to any other encoding, including binary, by simply modifying the list of character in $chars.

function hex2alphanum62($hex)
{
	$chars = '0123456789abcdefghijklmnopqrstuwvxyzABCDEFGHIJKLMNOPQRSTUWVXYZ';
	$setbase=strlen($chars);

	$answer = '';
	while (!empty($hex) && ($hex !== 0)) {

		$hex_result = '';
		$hex_remain = '';

		// divide by base in hex:
		for ($i=0;$i<strlen($hex);$i+=1){

			$hex_remain = $hex_remain . $hex[$i];
			$dec_remain = hexdec($hex_remain);
			// small partial divide in decimals:
			$dec_result = (int)($dec_remain/$setbase);

			if (!empty($hex_result) || ($dec_result > 0))
				$hex_result = $hex_result . dechex($dec_result);

			$dec_remain = $dec_remain - $setbase*$dec_result;
			$hex_remain = dechex($dec_remain);
		}

		$answer = $chars[$dec_remain] . $answer;
		$hex = $hex_result;
	}

	return $answer;
}

For more questions about this, please feel free to contact the developers at:

info@handsonturkish.com


newturkishlogo01    llp-logo

HandsOnTurkish is an EU-funded project from a consortium of publishers, programmers and language learning experts. Learn Turkish online or download the apps (available for iOS and Android).


Thank you for visiting HandsOnTurkish.com. Our award winning interactive courses of Turkish have been developed for anyone with a genuine interest in the Turkish language and Turkish culture, whether for private, educational or professional reasons and are specially designed for self-study. Our website and our language courses are free from advertisements and we don't share any personal details of our visitors or registered members with third parties. Nor do we sell data for targeted advertising. We believe passionately that learning should be free from commercial distractions. For this reason we rely on subscriptions to fund the development of our products. Click here to find out more about our online Turkish courses.