Bonjour,

J'aurais besoin de porter une fonction de C# vers NodeJS. La fonction est courte (30 lignes), prend en paramètre une clé et un timestamp et calcule un code, à l'aide de masques de bits et d'un hash SHA1.

Ci-dessous le code:

public string GenerateCodeForTime(string secretKey, long time)
{
byte[] CodeTranslations = new byte[] { 50, 51, 52, 53, 54, 55, 56, 57, 66, 67, 68, 70, 71, 72, 74, 75, 77, 78, 80, 81, 82, 84, 86, 87, 88, 89 };

byte[] sharedSecretArray = Convert.FromBase64String(this.secretKey);

byte[] timeArray = new byte[8];

time /= 30L;

for (int i = 8; i > 0; i--)
{
timeArray[i - 1] = (byte)time;
time >>= 8;
}

HMACSHA1 hmacGenerator = new HMACSHA1();
hmacGenerator.Key = sharedSecretArray;
byte[] hashedData = hmacGenerator.ComputeHash(timeArray);
byte[] codeArray = new byte[5];
try
{
byte b = (byte)(hashedData[19] & 0xF);
int codePoint = (hashedData[b] & 0x7F) << 24 | (hashedData[b + 1] & 0xFF) << 16 | (hashedData[b + 2] & 0xFF) << 8 | (hashedData[b + 3] & 0xFF);

for (int i = 0; i < 5; ++i)
{
codeArray[i] = CodeTranslations[codePoint % CodeTranslations.Length];
codePoint /= CodeTranslations.Length;
}
}
catch (Exception e)
{
return null;
}
return Encoding.UTF8.GetString(codeArray);
}

Exemple de résultats à reproduire:
GenerateCode("6HIo5Sp3Zy/yuw5zkGq2llg9rMY=", [Téléphone visible pour les membres Pro]) = "K3PPD"
GenerateCode("6HIo5Sp3Zy/yuw5zkGq2llg9rMY=", [Téléphone visible pour les membres Pro]) = "BC3VM"
GenerateCode("6HIo5Sp3Zy/yuw5zkGq2llg9rMY=", [Téléphone visible pour les membres Pro]) = "BC3VM"
GenerateCode("6HIo5Sp3Zy/yuw5zkGq2llg9rMY=", [Téléphone visible pour les membres Pro]) = "D2VJG"

Informations ajoutées le 30 novembre 2015 16:50:36 :

Désolé, deux mini typo pour compiler le code ci-dessus:
1) GenerateCodeForTime s'apelle GenerateCode dans les tests
2) this.secretKey doit être remplacé par secretKey

Ci-joint le fichier cs

Fichier joint : GenerateCode.zip

Budget indicatif30 à 300 €
Publié le30 novembre 2015 à 16h33
Objectif de cette demandeProjet concret et réalisation rapide
Profils recherchés :

Vous avez aussi besoin d'un expert ?

Déposez une annonce en décrivant votre projet et recevez gratuitement des devis en quelques minutes

Déposer une annonce gratuite

Offres pour ce projet :

Offre déposée le 30/11/2015 à 18h53
Offre déposée le 30/11/2015 à 19h28
Déposez un projet similaire
Publication 100% gratuite
Recevez 10 devis en moyenne
Pas de commission à payer

Vous êtes prestataire et vous cherchez des missions ?

Remplissez rapidement votre carnet de commandes en utilisant Codeur.com pour contacter des nouveaux clients.

Créer un compte gratuitement

Gérer mon projet

Chaque jour, des centaines de clients utilisent Codeur.com pour trouver un prestataire. Créez votre compte dès maintenant, remplissez votre profil et trouvez de nouveaux clients.

Trouver des nouveaux clients

En utilisant ce site, vous acceptez l'utilisation de cookies. permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts.

Votre navigateur Web n’est plus à jour. Il ne permet pas d’afficher correctement le site Codeur.com.
Nous vous invitons à mettre à jour votre navigateur ou à utiliser un autre navigateur plus récent.