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