Comme le dit le titre, j'essaie d'implémenter les parties programmatiques de RFC4226 "HOTP: un algorithme de mot de passe à usage unique basé sur HMAC" dans SQL. Je pense que j'ai une version qui fonctionne (en ce que pour un petit échantillon d'essai, il produit le même résultat que la version Java dans le code), mais il contient une paire imbriquée de hex (UNHEX()) appelle, que je le sentiment peut être mieux fait. Je suis contraint par a) avoir besoin de faire cet algorithme, et b) avoir besoin de le faire dans mysql, sinon je suis heureux de regarder d'autres façons de le faire.Implémentation des parties de rfc4226 (HOTP) dans mysql
Ce que j'ai jusqu'à présent: chemin
-- From the inside out...
-- Concatinate the users secret, and the number of time its been used
-- find the SHA1 hash of that string
-- Turn a 40 byte hex encoding into a 20 byte binary string
-- keep the first 4 bytes
-- turn those back into a hex represnetation
-- convert that into an integer
-- Throw away the most-significant bit (solves signed/unsigned problems)
-- Truncate to 6 digits
-- store into otp
-- from the otpsecrets table
select (conv(hex(substr(unhex(sha1(concat(secret, uses))), 1, 4)), 16, 10) & 0x7fffffff) % 1000000
into otp
from otpsecrets;
Y at-il une meilleure (plus efficace) de le faire?
grâce, l'arrière-plan ne devrait pas être important tant que les résultats sont les mêmes –
Eh oui, c'est exactement ce que je voulais, merci encore –