/**
获取随机密码
date的格式是年月日yymmdd,privatyKey为10位左右的字母数字组合串
1.需要返回8位纯数字
2.须使用date,privatyKey来生成
3.每次调用都是随机生成的(在date、privatyKey相同的情况下,返回的结果也要不同),尽量保证低重复率
**/
getPassword(date,privatyKey){
}
/**
检测密码
getPassword生成的密码可以通过检测,随便输入的密码通不过检测
**/
checkPassword(date,privatyKey,password){
}
有什么合适的算法?
Un problème inévitable : il y a trop peu de choses qui peuvent être stockées dans un numéro à 8 chiffres (
1e8 或 2^30
).Cette méthode est donc presque totalement résistante à l'épuisement. L'attaquant n'a qu'à corriger les 3 premiers bits et à épuiser les 5 derniers bits.
Lors de son utilisation, l'algorithme lui-même doit être gardé secret, ou des restrictions telles que le nombre de tentatives doivent être ajoutées.
Une variante qui augmente légèrement la difficulté d'épuisement :
peut utiliser une fonction de hachage prête à l'emploi (telle que sha256) sur
(date, pkey)
. Le résultat est généralement bien plus que 8 chiffres d’informations numériques pures. Divisez ces informations en petits morceaux et renvoyez-en un au hasard.Essayez d'utiliser MD5
Si vous souhaitez renvoyer des résultats différents à chaque fois, vous pouvez utiliser TripleDes
Mais le résultat ne peut être qu'un nombre pur à 8 chiffres, ce qui est déjà assez gênant
md5, openssl est relativement simple
La solution finale prend une partie de la valeur après hachage