Sample code for 30+ languages & platforms
PowerBuilder

TOTP Authenticator: Duplicate Results of Online Tools

See more Encryption Examples

Duplicates the online tool for the Google 2FA Authenticator online tools at

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
oleobject loo_Crypt
string ls_SecretKey

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// 
// Note: This example was written on 7-March-2020.  If the online tools have since changed, the instructions provided here may no longer be valid.
// 

loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")
if li_rc < 0 then
    destroy loo_Crypt
    MessageBox("Error","Connecting to COM object failed")
    return
end if

// ---------------------------------------------------------------------------------------------
// To duplicate the results of the Authenticator Test at https://rootprojects.org/authenticator/
// do the following:
// 1) At the bottom of the screen you will see a URI such as:
// 
//    otpauth://totp/ACME%20Co:john@example.com?secret=HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ&issuer=ACME%20Co&algorithm=SHA1&digits=6&period=30
// 
//    Use the uppercase secret.  For example:
ls_SecretKey = "HXDMVJECJJWSRB3HWIZR4IFUGFTMXBOZ"

// 2) DO NOT cick the "Regenerate" button.  The regenerate button will generate a new secret.
// 
// 3) Run the following code to generate your 6-digit token.  Compare with the token shown in the picture of the iPhone at https://rootprojects.org/authenticator/
//      Note: A new token is generated every 30 seconds.  You must generate within the same 30 second interval to get the same result.
Write-Debug "Your token is: " + loo_Crypt.Totp(ls_SecretKey,"base32","0","",30,6,-1,"sha1")

// ---------------------------------------------------------------------------------------------
// To duplicate the results of the Google2FA Playground at https://pragmarx.com/playground/google2fa#/
// do the following:

// 1) Copy the 64-byte secret key:
ls_SecretKey = "OR2VQTRVHB2HO2LCGVWXQSCDK5ZHQS2D3THQ6UXO57XIE7ZHOWS6HDPQ622GU747"

// 2) Run the same code:
//    (Note: The online tool generates a new result every 30 seconds.  You must generate and compare within the same 30-second interval.)
Write-Debug "Your token is: " + loo_Crypt.Totp(ls_SecretKey,"base32","0","",30,6,-1,"sha1")


destroy loo_Crypt