Generare OTP in Kotlin
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 Kotlin usando la libreria Kotlin One-Time Password Library!
Per installarla ho usato Maven aggiungendo questa dipendenza:
<dependency>
<groupId>dev.turingcomplete</groupId>
<artifactId>kotlin-onetimepassword</artifactId>
<version>2.1.0</version>
</dependency>
Cominciamo con il codice per creare un OTP a tempo:
import dev.turingcomplete.kotlinonetimepassword.*
import java.util.concurrent.TimeUnit
fun main(args: Array<String>) {
val secret = "mattepuffo_otp"
totp(secret)
}
fun totp(secret: String) {
val config = TimeBasedOneTimePasswordConfig(
codeDigits = 6,
hmacAlgorithm = HmacAlgorithm.SHA512,
timeStep = 5,
timeStepUnit = TimeUnit.SECONDS
)
val totpGenerator = TimeBasedOneTimePasswordGenerator(secret.toByteArray(), config)
val totp = totpGenerator.generate(System.currentTimeMillis())
println(totp)
println(totpGenerator.isValid(totp, System.currentTimeMillis()))
Thread.sleep(10000)
println(totpGenerator.isValid(totp, System.currentTimeMillis()))
}
Lo creiamo di 6 cifre, e con una validità di 5 secondi.
Infatti il primo isValid darà true, il secondo false (dovete aspettare i 10 secondi di sleep).
Poi abbiamo la possibilità di crearli counter based:
import dev.turingcomplete.kotlinonetimepassword.*
import java.util.concurrent.TimeUnit
fun main(args: Array<String>) {
val secret = "mattepuffo_otp"
hotp(secret)
}
fun hotp(secret: String) {
val config = HmacOneTimePasswordConfig(
codeDigits = 6,
hmacAlgorithm = HmacAlgorithm.SHA512
)
val hotpGenerator = HmacOneTimePasswordGenerator(secret.toByteArray(), config)
val hotp = hotpGenerator.generate(5)
println(hotp)
println(hotpGenerator.isValid(hotp, 5))
println(hotpGenerator.isValid(hotp, 6))
}
Ho fatto il test con due counter diversi per vedere il risultato.
Enjoy!
kotlin otp kotlin-onetimepassword
Commentami!