Vogliamo che la possibilità di effettuare pagamenti senza effettuare l'accesso utilizzando uno dei metodi di pagamento salvati sia associata al metodo di pagamento salvato. Per esempio. se acquistano un abbonamento ricorrente alla rivista 1 utilizzando la carta di credito 1, quindi acquistano un altro abbonamento alla rivista 2 con carta di credito 1 (ancora una volta), quando accedono al proprio account dovrebbe mostrare che entrambe le riviste sono state acquistate con lo stesso metodo di pagamento . (Non che entrambi siano stati acquistati usando due carte separate che si concludono così nelle stesse ultime 4 cifre).
Poiché non sono connessi durante questi due checkout, non c'è modo per loro di scegliere il loro metodo di pagamento esistente da utilizzare. Internamente, dobbiamo renderci conto che questo metodo di pagamento è stato utilizzato prima e "deduplicarli".
La mia soluzione a questo problema è usare Blowfish per cancellare i dettagli della carta:
private static String hashSalt(Long userId) {
final Long rounds = 10
String userHash = sha1("$userId" + GLOBAL_SALT).substring(0, 16)
return "\a\$$rounds\$$userHash"
}
private static String mergeCardDetails(String number, String cvv, String expirationMonth, String expirationYear) {
return "card:$number:$cvv:$expirationMonth:$expirationYear"
}
hash = BCrypt.hashpw(mergeCardDetails("4111111111111111", "123", "05", "22"), hashSalt(userId))
Attualmente il conteggio del round è impostato su 10. Tuttavia, mi rendo conto che questo è un numero molto basso come lo spazio di ricerca per i numeri delle carte è molto basso .
La mia domanda è: quanti round sono appropriati per i numeri delle carte hashing, oggi?
So che in futuro il conteggio del round dovrà essere aumentato, con conseguente duplicazione dei metodi di pagamento ...