Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkPrng.pb"
IncludeFile "CkDateTime.pb"
IncludeFile "CkCrypt2.pb"

Procedure ChilkatExample()

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

    password.s = "secret"

    crypt.i = CkCrypt2::ckCreate()
    If crypt.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkCrypt2::setCkHashAlgorithm(crypt, "SHA-1")
    CkCrypt2::setCkEncodingMode(crypt, "base64")

    ; Generate a 16-byte random nonce
    prng.i = CkPrng::ckCreate()
    If prng.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    bd.i = CkBinData::ckCreate()
    If bd.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkPrng::ckGenRandomBd(prng,16,bd)

    ; Get the current date/time in a string with this format: 2010-06-08T07:26:50Z
    dt.i = CkDateTime::ckCreate()
    If dt.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkDateTime::ckSetFromCurrentSystemTime(dt)
    created.s = CkDateTime::ckGetAsTimestamp(dt,0)
    CkBinData::ckAppendString(bd,created,"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.s = CkCrypt2::ckHashStringENC(crypt,password)
    ; Append the 20 binary bytes of the SHA1 hash to bd, which already contains the nonce and created date/time.
    CkBinData::ckAppendEncoded(bd,passwordSha1,"base64")

    passwordDigest.s = CkCrypt2::ckHashBdENC(crypt,bd)

    Debug "Base64 password digest = " + passwordDigest


    CkCrypt2::ckDispose(crypt)
    CkPrng::ckDispose(prng)
    CkBinData::ckDispose(bd)
    CkDateTime::ckDispose(dt)


    ProcedureReturn
EndProcedure