I came up with this idea but I cant figure out if it's good or bad, maybe you can help. My goal is: I want to create extremely strong passwords for my main accounts (gmail, skype and so on). I want to have different passwords for all my accounts that are longer than 20 characters and that contains lower+upper case chars, numbers and special characters. What would you do to achieve that?

It's pretty impossibile to remember even one password like that so I came up with this idea: what if I develop a (simple and secret) hashing algorithm that transforms easy passwords (even 3 or 4 characters) into strong ones?

In that scenario I would only have to remember "dog" for my Gmail, "black" for Yahoo and so on. When you have to login, you just process your easy password in your handmade script that converts it, than you just copy-paste.

I think this method is great for some reasons:

if your hashing algo is irreversible and secret, there's no way to figure out the "easy passwords" by having (even a lot) of the strong passwords (anyway you must be really unlucky if someone managed to hack all your main accounts on gmail, forums, instant messaging and so on)

i just have to remember extremely easy words for all my accounts while my "final passwords" will be bulletproof for lots of years

if well made, an easy hashing algo can just be remembered and used on paper instead of making a script (that could be eventually stolen). the algorithm can be easy because you dont need an extremely good avalanche effect (you won't be making tens of thousands of passwords, maybe just 100 or 200 in a few years?

Even if a cracker managed to understand the formulas in your hashing algorithm, there are no public rainbow tables for your algorithm, and I highly doubt that your gmail account is so valuable that anyone would start making one. This method is meant only for everyday passwords, not for high risk situations where NSA is involved, and it is good because the algoritm is related only to YOUR passwords, because it's not a public one. MD5 is used by thousands of websites, that's why people started wasting time/money to crack it. My personal algo will be just mine, so noone will be interested to invest money to crack it

What's your opinion?

PS. sorry of my extremely bad english :)

  • 7
    Did you consider using a password manager and let it auto-generate your passwords?
    – Philipp
    Jul 8, 2014 at 8:01
  • Something like that? github.com/Serverfrog/FrogPw Generated SHA3 Hashes from the configuration that you give. Have a Save Function where the Java Objects Saved into a File encrypted with Serpent and your MasterPassword
    – Serverfrog
    Jul 8, 2014 at 13:50
  • You say "It's pretty impossibile to remember even one password like that [20 characters in length, lowercase + uppercase + numbers + symbols]". But you may be going about it the wrong way. What about "innertube8ALGAE'perturbing"? That meets all your criteria and is much easier to remember than a random string. If constructed from random words with a random number and symbol thrown in as delimiters it is still pretty secure against guessing/cracking attacks. Give it a try, you may find remembering a few passwords like this easier than you expected.
    – PwdRsch
    Jul 8, 2014 at 15:35

5 Answers 5


Don't roll your own crypto.

It lulls you into a false sense of security, and may be detrimental if you publish it and other people start using it. A hashing algorithm's strength does not stem from the opacity of its design; on the contrary, it benefits from the thousand expert minds looking at it.

Your basic idea isn't without merit, though. But if you are going to use hashed words as passwords, you might as well go for a vetted hashing algorithm which is known to be difficult to reverse.

Even if a cracker managed to understand the formulas in your hashing algorithm, there are no public rainbow tables for your algorithm

By the way, proper use of salts defeats this problem entirely for public algorithms!


if your hashing algo is irreversible and secret

This is always a bad design practice. As soon as this algorithm becomes known to the attacker (and it will), you are doomed. Thus all designs should assume that algorithms are known to the attacker. Keys should be kept secret, not the algorithm -- keys can be easily replaced, but algorithm cannot.

Please, please do not invent and publish your own "strong" hashes unless you are really proficient in the field. Other people may end up using your algorithms thinking they are "secure".

If you want something easy to remember, write a short poem. This provides enough bits to be secure and should be quite easy to recall.


You cannot make a weak password stronger without using some additional entropy source. Hashing does not add any entropy and therefore the resulting password is just as weak as the one you started with.

Also, using some "secret" hash algorithm is a bad decision, since you are basing you security purely on keeping the algorithm secret. This means you cannot discuss it with anyone or give someone else access to your algorithm. Once it leaks out, you need to change your complete setup since all the secrecy is within the way the algorithm works. This is called security by obscurity.


This is no a good idea vs using a password manager and actual strong passwords. If you "hashing" algorithm is able to be done in your head, then it simply is not secure and WILL be vulnerable to fairly simple analysis attacks. If it is complex enough to require an application with multiple iterations, it may or may not be vulnerable to simple analysis attacks, but it is then no harder than using a password manager, which would provide far, FAR greater security.

The key thing to remember is that a derived password is not meaningfully more secure than the password from which it is based. If the password started simple and the derivation algorithm were discovered, it becomes trivial to build a rainbow table against simple passwords and they quickly get revealed.

Unless you are a cryptographer with hundreds of thousands of dollars to invest in testing and review, you are not going to form an algorithm that is more secure than existing hashes and that you can be even marginally certain does not have major weaknesses.

That all said, if all you are protecting is some personal accounts that you don't need particularly high security on, the chances of someone bothering to figure out your system (even if it is relatively easy to do) are probably fairly minimal as long as you are only worried about criminal hackers and aren't a high risk target, so in that sense, IF you are actually a low value target and not using it on any accounts of value, then it might provide slightly better security than using simple passwords, but it would do very little against a dedicated attacker after you specifically.

Using established standards is simply a better, stronger, more secure practice since they have been well designed and have had millions, if not billions, of dollars worth of verification done against them.


I have actually done this once upon a time to get around a truly ridiculous series of password complexity and character restrictions. It's generally a bad idea; yet it would serve them right if they got hacked partially because of their own brain-damaged password requirements.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .