Generazione di un codice di conferma SMS a 4 cifre

1

Devo generare un semplice codice SMS di conferma a 4 cifre, basato su informazioni fornite, e. g. nome utente o data di nascita, qualunque sia. Quindi, per due ingressi identici, ho bisogno di due codici di uscita uguali.

Non riesco a memorizzare questo codice nel database.

Sto scrivendo in C # e ho pensato al metodo GetHashCode , ma non è assolutamente consigliabile utilizzarlo ovunque. Forse un po 'di hashing, ma hanno molto più quella stringa di 4 caratteri.

Come posso generare tale codice?

    
posta Yurii N. 06.12.2016 - 16:17
fonte

2 risposte

5

Prendi solo le informazioni che ti servono, concatenandole insieme in una stringa, quindi inseriscile con una funzione hash crittografica. Prendi le 4 cifre più basse dell'hash e chiamane un giorno.

    
risposta data 06.12.2016 - 16:39
fonte
-1

based on given information, e. g. username, or birthdate, whatever. So, for two identical inputs, I need two same output

Perché? Il punto della maggior parte delle conferme SMS è confermare l'identità della persona che avvia una determinata azione. A tal fine, non emette nessuna differenza nel codice che hai inviato. Finché l'utente che riceve gli utenti digita ciò che hai inviato, è tutto ciò che ti serve. Inoltre, la generazione di questo codice basato deterministicamente su altri dati [personali] è un potenziale buco di sicurezza.

I can't store this code in database.

SMS è non un protocollo sincrono.

Solo perché hai inviato un messaggio non significa che sia stato ricevuto o che l'utente abbia il telefono caricato e acceso al momento. Potrebbero essere diversi minuti prima che l'utente sia in possesso del codice che hai inviato ed è pronto a reinserirlo.

Dove altro hai intenzione di conservarlo mentre aspetti ??

GetHashCode restituisce un valore univoco per ogni oggetto .Net all'interno di un'applicazione in esecuzione ma, non appena quell'oggetto esce dall'ambito ed è sottoposto a garbage collection, tale valore è scomparso e non può essere ripristinato.
A meno che non lo riposti da qualche parte.

    
risposta data 07.12.2016 - 13:35
fonte

Leggi altre domande sui tag