/**
获取随机密码
date的格式是年月日yymmdd,privatyKey为10位左右的字母数字组合串
1.需要返回8位纯数字
2.须使用date,privatyKey来生成
3.每次调用都是随机生成的(在date、privatyKey相同的情况下,返回的结果也要不同),尽量保证低重复率
**/
getPassword(date,privatyKey){
}
/**
检测密码
getPassword生成的密码可以通过检测,随便输入的密码通不过检测
**/
checkPassword(date,privatyKey,password){
}
有什么合适的算法?
Masalah yang tidak dapat dielakkan: Terdapat terlalu sedikit perkara yang boleh disimpan dalam nombor 8 digit (
1e8 或 2^30
).Jadi kaedah ini hampir tahan sepenuhnya terhadap keletihan Penyerang hanya perlu membetulkan 3 bit pertama dan menghabiskan 5 bit terakhir.
Apabila menggunakannya, algoritma itu sendiri mesti dirahsiakan, atau sekatan seperti bilangan percubaan mesti ditambah.
Varian yang meningkatkan sedikit kesukaran keletihan:
boleh menggunakan fungsi cincang siap pakai (seperti sha256) pada
(date, pkey)
. Hasilnya biasanya lebih daripada 8 digit maklumat berangka tulen. Bahagikan maklumat ini kepada kepingan kecil dan kembalikan satu bahagian secara rawak.Cuba gunakan MD5
Jika anda ingin mengembalikan hasil yang berbeza setiap kali, anda boleh menggunakan TripleDes
Tetapi hasilnya hanya boleh menjadi nombor tulen 8 digit, yang cukup memalukan
md5, openssl agak mudah
Penyelesaian terakhir mengambil sebahagian daripada nilai selepas pencincangan