function oneWayEncrypt($string) {
$salt = md5($string."yHuJ@8&6%4#%([@d-]");
$salt2 = md5($string."@!#&+-)jU@[yT$@%");
$string = hash('sha512',"$salt$string$salt2");
return $string;
}
function oneWayEncrypt($string) { $salt = md5($string.yHuJ@8&6%4#%([@d-]); $salt2 = md5($string.@!#&+-)jU@[yT$@%); $string = hash(‘sha512’,$salt$string$salt2); return $string;
Share
Using SHA-512 is a good idea to get a cryptographically strong hash, but your choice of a salt does not add much extra security. In particular, a salt is only good if its value is random and cannot be predicted in advance. This prevents an attacker from precomputing a table of known hashes with which to try to attack your database. If the salt is known, then the attacker can just precompute a table of hash values with the salt hardcoded in.
In your case, the salt is essentially known to the attacker because it’s deterministically computed from the input string. If I wanted to attack your system, I could iterate across a bunch of known strings, (deterministically) compute the salt for each string, then compute the SHA-512 hash of the salted string and store it in a table. From this, I could invert a hash to a password for any string I happened to precompute.
If you want a better security system, instead consider using a salt that’s randomly-generated and then stored alongside the resulting hash. That way, no matter what tables I precompute, there’s a slim chance that the table will be useful because I won’t necessarily have computed the tables for all possible salts. Essentially, each random bit in your salt doubles the amount of work I have to do, so if you pick a good random salt (say, 128 bits) then there’s no feasible way I could do a precomputation attack. I’d have to attack SHA-512, a hash assumed to be cryptographically secure (the name means “Secure Hash Algorithm”), to break your system.