Generare OTP in C#

Mattepuffo's logo
Generare OTP in C#

Generare OTP in C#

OTP sta per One Time Password, ed è sempre più usato per migliorare la sicurezza online; sia per il login che per effettuare altre operazioni.

In genere questi OTP vengono iviati per SMS o per email.

Oggi vediamo come crearli in C# usando la libreria Otp.NET!

Per installarla potete usare NuGet.

Qui sotto il codice completo con un esempio sia per il time based che per il counter based:

using OtpNet;

namespace TestCsharpConsole
{
    class TestClass
    {
        static void Main(String[] arg)
        {
            var secret = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
            creaHotp(secret);
            creaTotp(secret);
        }

        static void creaHotp(byte[] secret)
        {
            var hotp = new Hotp(secret, mode: OtpHashMode.Sha512);
            var hotpCode = hotp.ComputeHOTP(4);
            var verified = hotp.VerifyHotp(hotpCode, 4);

            Console.WriteLine(verified);
        }

        static void creaTotp(byte[] secret)
        {
            long timeWindowUsed;

            var totp = new Totp(secret, mode: OtpHashMode.Sha512);
            var totpCode = totp.ComputeTotp(DateTime.UtcNow);
            var remainingTime = totp.RemainingSeconds();
            var remainingSeconds = totp.RemainingSeconds(DateTime.UtcNow);

            var verified = totp.VerifyTotp(totpCode, out timeWindowUsed, VerificationWindow.RfcSpecifiedNetworkDelay);

            Console.WriteLine(totpCode);
            Console.WriteLine(remainingTime);
            Console.WriteLine(remainingSeconds);
            Console.WriteLine(timeWindowUsed);
            Console.WriteLine(verified);
        }
    }
}

La documentazione non è proprio un granchè.

Per prenderci un po la mano vi conviene giocherellare un pò con il codice.

Per il counter based, considerate sempre che il conteggio glielo passiamo statico nel codice; nella realtà il conteggio andrà salvato da qualche parte.

Enjoy!


Condividi

Commentami!