Sample code for 30+ languages & platforms
Objective-C

TOTP Authenticator: Duplicate Results of Online Tools

See more Encryption Examples

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

Chilkat Objective-C Downloads

Objective-C
#import <CkoCrypt2.h>
#import <NSString.h>

//  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.
//  

CkoCrypt2 *crypt = [[CkoCrypt2 alloc] init];

//  ---------------------------------------------------------------------------------------------
//  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:
NSString *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.
NSLog(@"%@%@",@"Your token is: ",[crypt Totp: secretKey secretEnc: @"base32" t0: @"0" tNow: @"" tStep: [NSNumber numberWithInt: 30] numDigits: [NSNumber numberWithInt: 6] truncOffset: [NSNumber numberWithInt: -1] hashAlg: @"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:
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.)
NSLog(@"%@%@",@"Your token is: ",[crypt Totp: secretKey secretEnc: @"base32" t0: @"0" tNow: @"" tStep: [NSNumber numberWithInt: 30] numDigits: [NSNumber numberWithInt: 6] truncOffset: [NSNumber numberWithInt: -1] hashAlg: @"sha1"]);