SHA256 PassHash

From SA-MP Wiki

Jump to: navigation, search

SHA256_PassHash

This function was added in SA-MP 0.3.7 R1 and will not work in earlier versions!


Description:

Hashes a password using the SHA-256 hashing algorithm. Includes a salt. The output is always 256 bits in length, or the equivalent of 64 Pawn cells.


Parameters:
(password[], salt[], ret_hash[], ret_hash_len)
password[]The password to hash.
salt[]The salt to use in the hash.
ret_hash[]The returned hash in uppercase hexadecimal digest.
ret_hash_lenThe returned hash maximum length.


Return Values:

The length of the hash string (64 bytes).
  • The hash is stored in the specified array.


Image:32px-Circle-style-warning.png

Warning

This function is not binary-safe. Using binary values on password and salt might give unexpected result.


Image:32px-Ambox_warning_orange.png

Note

The returned hash has zero padding (i.e. possible prefix 00ABCD123...).


Tips

Image:Light_bulb_icon.png

  • The salt is appended to the end of the password, meaning password 'foo' and salt 'bar' would form 'foobar'.
  • The salt should be random, unique for each player and at least as long as the hashed password. It is to be stored alongside the actual hash in the player's account.


Example Usage:

public OnGameModeInit()
{
    new MyHash[64 + 1]; // + 1 to account for the required null terminator
    SHA256_PassHash("test", "78sdjs86d2h", MyHash, sizeof MyHash);
    printf("Returned hash: %s", MyHash); // Returned hash: CD16A1C8BF5792B48142FF6B67C9CB5B1BDC7260D8D11AFBA6BCDE0933A3C0AF
    return 1;
}