Sample code for 30+ languages & platforms
Unicode C

Password_Digest = Base64 (SHA-1 ( nonce + created + SHA-1 (password) ) )

See more Encryption Examples

Demonstrates how to compute:
Password_Digest = Base64 (SHA-1 ( nonce + created + SHA-1 (password)))

Chilkat Unicode C Downloads

Unicode C
#include <C_CkCrypt2W.h>
#include <C_CkPrngW.h>
#include <C_CkBinDataW.h>
#include <C_CkDateTimeW.h>

void ChilkatSample(void)
    {
    const wchar_t *password;
    HCkCrypt2W crypt;
    HCkPrngW prng;
    HCkBinDataW bd;
    HCkDateTimeW dt;
    const wchar_t *created;
    const wchar_t *passwordSha1;
    const wchar_t *passwordDigest;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    password = L"secret";

    crypt = CkCrypt2W_Create();
    CkCrypt2W_putHashAlgorithm(crypt,L"SHA-1");
    CkCrypt2W_putEncodingMode(crypt,L"base64");

    // Generate a 16-byte random nonce
    prng = CkPrngW_Create();
    bd = CkBinDataW_Create();
    CkPrngW_GenRandomBd(prng,16,bd);

    // Get the current date/time in a string with this format: 2010-06-08T07:26:50Z
    dt = CkDateTimeW_Create();
    CkDateTimeW_SetFromCurrentSystemTime(dt);
    created = CkDateTimeW_getAsTimestamp(dt,FALSE);
    CkBinDataW_AppendString(bd,created,L"utf-8");

    // This example wishes to calculate a password digest like this:
    // Password_Digest = Base64 ( SHA-1 ( nonce + created + SHA-1(password) ) )

    // First SHA-1 digest the password...
    passwordSha1 = CkCrypt2W_hashStringENC(crypt,password);
    // Append the 20 binary bytes of the SHA1 hash to bd, which already contains the nonce and created date/time.
    CkBinDataW_AppendEncoded(bd,passwordSha1,L"base64");

    passwordDigest = CkCrypt2W_hashBdENC(crypt,bd);

    wprintf(L"Base64 password digest = %s\n",passwordDigest);


    CkCrypt2W_Dispose(crypt);
    CkPrngW_Dispose(prng);
    CkBinDataW_Dispose(bd);
    CkDateTimeW_Dispose(dt);

    }