I’m pretty new to encryption, what do you mean by formats? also, i found a site online on which i can decrypt something, however, it asks for a key, can you please give me some examples of what a key looks like? here’s a link to the site if you’re interested: https://www.tools4noobs.com/online_tools/decrypt/
Let me give you hint.
- Do you know what is MD5 ?
- If yes then think is it possible to convert text to any other text using different method like MD5 ?
If you know both answer then you are almost done.
And this is Big Hint
Security is Myth
You can decrypt only encrypted data but MD5 is not encryption method.
if You use MD5 function on any string it will always return 32 character long string even if you convert 100 character long string, that means MD5 do not use encryption. after certain length you can not recover data from MD5 but still you can guess the string by converting every possible string to MD5 and check which string’s MD5 value match with the MD5 you are looking for. this method is known as Rainbow Table.
Now is your String 32 character long ?? if yes then chances are there that string is MD5 but if answer is NO then maybe there is some other algorithm used and you need to find the rainbow table for that algorithm.
If you still confuse that means you did’t try enough.
Try harder.
Security is Myth
Security is Myth
[quote=Web_Hacker]I typed in “HackThis” in an md5 hash generator and this was the output: 68b9fb745ab480487520a1c402b41169, I’m comparing this with the beginning of the string in the file: 69bfe1e, does this mean I’m getting closer or is a function’s output just simply much more random than that?
[/quote]It is not closer and let me explain.
Hash functions are quick and simple functions that assembles some file or information bit a bit into some shorter information: a fingerprint. So the hash function maps information into a set of identities. But the function is not intended to order the identifications. On the opposite, the hash function is intended to fuzz the set of identifications, in order the hash function to become non-invertible. Also, hash functions are intended not to have more than one data for each identification. So, hash functions are meant to be fast and univocal, but impossible to invert. (Notice: One should refer to “identities” by hash values instead, which is better).
The main applications are to assure integrity and identification of files and to protect passwords.
Some web servers provide the hash value of a downloadable file, when the file is large. The hash value presented on the web page may be compared to the hash value obtained after applying the hash function to the file itself. It garantes that the file is indeed the desired file and it was downloaded on its integrity. Torrent clients may also use hashes to prevent malware or fake file transmissions. If someone substitute the exe file you downloaded for a trojan, for example, you may check its hash without running the exe file. You may ask a friend to compute the hash and compare it with yours, if he has downloaded the same file.
In database servers, passwords are not meant to be stored. What is stored is the hash of the password. Not even the owner of the database is supposed to know the passwords. However, as hash functions are easily computable, one can compute several hashes and build a database of ordered hashes, which is why some hashes may be insecure. Common practices are to apply the hash function more than once and to add secret strings to the password before applying the hash function. Also, it is advisable to use a hash function which has a wide set of possible hashes, as wide as necessary.
MD5 is a hash function, just like SHA (Secure Hash Algorithm) family is. The difference is that MD5 has hashes of 32 hex characters. Because an hex character has 4 bits, 32 hex characters gives 128=324 bits of information. So the total quantity of hex words generated by md5 is 2128, which is close to 1012 of words. SHA512, on the other hand, generates words of 128 hex characters, so 512=1284 bits of information and 2512?1051 words, which is a quantity far greater than MD5’s.
In the following lines, I’ve applied md5 and sha512 to “charcode78”. The command “echo -n” prints a message on the terminal, the result is piped into the hash function algorithm, through “|”. Then you may see the differences and characteristics.
charcode78@localhost ~> echo -n charcode78
charcode78~
charcode78@localhost ~> echo -n charcode78 | md5sum
9d54a802ca11b971ff6ef4fa803ff14a -
charcode78@localhost ~> echo -n charcode78 | sha512sum
56b6230ca75d943b40ca7138db1f0cc26d7243a453933f1b153dfe1a56a45294cd0884dbb0012615ae35384a2820a97c025e8bdf9a47726171a1238046684a4e -
Hash functions are different from encryption, because encryption infers one’d expect the content to be decrypted. There is the symmetrical encryption, where there is only one key that encrypts and decrypts some content, which is very known. There is also the asymmetrical encryption, where a private key is meant to be held by by only one person and a public key is meant to be held by everybody else. Everybody may encrypt a content that only the owner of the private key is supposed to decrypt. Also, the owner of the private key may encrypt some content that everybody may decrypt, but only he could have encrypted. The owner of the private key is the only one who can read the content, if it is encrypted with his public key, or the owner of the private key is the author of the encrypted content if he encrypted it and everybody may know about it.
So, while hash functions may provide integrity and identification of information and is applied to information itself to generate a fingerprint, encryption may provide confidentiality and authenticity of information and depends on the application of secret keys.
In the following I’ve posted the symmetrical encryption. By the way, gpg used AES, which is a block cypher. That’s why charcode78 was turned into 4 hex lines. Also, I had to type the password and it was not shown on the terminal. =)
charcode78@localhost ~> echo -n charcode78 | hd
00000000 63 68 61 72 63 6f 64 65 37 38 |charcode78|
0000000a
charcode78@localhost ~> echo -n charcode78 | gpg --symmetric | hd
gpg: gpg-agent is not available in this session
00000000 8c 0d 04 07 03 02 df 30 9b 34 71 30 65 d2 60 d2 |.......0.4q0e.`.|
00000010 3f 01 b3 33 c4 61 5b 46 13 02 3a b8 3e 77 e3 33 |?..3.a[F..:.>w.3|
00000020 48 2a 74 08 d7 9e fc b6 18 be d1 0b 6f 07 81 85 |H*t.........o...|
00000030 f6 92 6a 65 8f e6 01 cc 83 ff 8a bf ae e0 77 ef |..je..........w.|
00000040 6e 91 d0 0f 6d 51 12 e7 b2 83 9f e2 a3 61 80 ce |n...mQ.......a..|
00000050
charcode78@localhost ~> echo -n charcode78 | gpg --symmetric | gpg --decrypt | hd
gpg: gpg-agent is not available in this session
gpg: AES encrypted data
gpg: gpg-agent is not available in this session
gpg: encrypted with 1 passphrase
00000000 63 68 61 72 63 6f 64 65 37 38 |charcode78|
0000000a
In resume, you can’t never ever [s]DECRYPT[/s] or [s]DECYPHER[/s] a hash! Instead you may talk about CRACKING the hash.
@charcode78 nice post, it explains things clearly, but I’ll have to disagree on some points.
On this paragraph:
[quote=charcode78]In database servers, passwords are not meant to be stored. What is stored is the hash of the password. Not even the owner of the database is supposed to know the passwords. However, as hash functions are easily computable, one can compute several hashes and build a database of ordered hashes, which is why some hashes may be insecure. Common practices are to apply the hash function more than once and to add secret strings to the password before applying the hash function. Also, it is advisable to use a hash function which has a wide set of possible hashes, as wide as necessary.
[/quote]
You should have specified that functions like SHA, MD, and plenty others hash functions are not meant to hash passwords. As you told, one can easily craft a hash table. Some workarounds have been found, like salts, increase of computational time by applying multiple times the hash function. bcrypt for example is a hash functions meant to hash passwords and it takes as input an algorithmic cost that will define the computation power needed (computational time depending on the hardware). This plus the good practice of using new pseudo-randomly generated salts for each password, make hash tables and rainbow tables impractical due to the computational power needed to retrieve a single password.
Also, you refer to salts as “secret strings”, which is false. In practice, we tend to not make salts public, but this is because there is no need for it. The point of a salt is not to increase security because it’ll add a secret element to a password, but to increase the security by not making same passwords giving the same hash. Hash functions are deterministic, so this is the only way (if someone sees another secure and practical way, please post it below) to avoid two identical passwords to map to the same hash. If an attacker retrieve a database with passwords and salts, (passwords being hashed and salts being in plaintext), he’ll need to generate a hash table for each salt, so to retrieve n passwords, he’ll need n hash tables.
I haven’t read the entire thread so it may well be the case that someone’s pointed this out already, but I just want to add that hash tables aren’t the only threat to weaker hash functions. Since hashes are fixed length strings there’s a finite amount of hashes for each given algorithm. Since there is an infinite amount of passwords (in theory anyway, some devs make the incredibly silly choice of limiting password length) there are bound to be collisions, i.e. two different strings that both map to the same hash. This means that you’ve set “banana” as your password, but I may be able to log in using “apple”. Hash functions with shorter hashes are more susceptible to collisions (e.g. MD5 is crap (in more ways than one), while SHA512 isn’t as bad).
[quote=r4v463]Also, you refer to salts as “secret strings”, which is false. In practice, we tend to not make salts public, but this is because there is no need for it.[/quote]
A case in point for this is WLAN APs. It is common to use the name of the WiFi as the salt for the WiFi password, so changing the name to something custom is quite important. If you don’t, but stick with the default name, there’s likely a premade rainbow table somewhere on the Internet that’s generated for your particular WiFi name, and at that point breaking into the network is a piece of cake. This is probably the reason why most AP names come with a pseudo-random component in the name by default, but still. If the name is “DLink-XXXXX” there’s only 99999 different AP names on that form, so generating all of these is “trivial”. Moral of the story is, change your WiFi name.
If you hold a UNIX shell up to your ear, can you hear the C?