java - 需要一个加密,验证算法
PHPz
PHPz 2017-04-18 10:52:04
0
6
788

/**
获取随机密码
date的格式是年月日yymmdd,privatyKey为10位左右的字母数字组合串
1.需要返回8位纯数字
2.须使用date,privatyKey来生成
3.每次调用都是随机生成的(在date、privatyKey相同的情况下,返回的结果也要不同),尽量保证低重复率
**/
getPassword(date,privatyKey){

}

/**
检测密码
getPassword生成的密码可以通过检测,随便输入的密码通不过检测
**/
checkPassword(date,privatyKey,password){

}

有什么合适的算法?

PHPz
PHPz

学习是最好的投资!

모든 응답(6)
左手右手慢动作

으아아아

피할 수 없는 문제: 8자리 숫자(1e8 或 2^30)로 저장할 수 있는 것이 너무 적습니다.
따라서 이 방법은 소모에 거의 완전히 면역됩니다. 공격자는 처음 3비트만 수정하고 마지막 5비트만 소모하면 됩니다.
사용 시 알고리즘 자체를 비밀로 유지하거나 시도 횟수 등의 제한을 추가해야 합니다.


탈진 난이도를 약간 높이는 변형:

으아아아
伊谢尔伦

(date, pkey)에서 미리 만들어진 해시 함수(예: sha256)를 사용할 수 있습니다. 결과는 일반적으로 8자리보다 훨씬 많은 순수 숫자 정보입니다. 이 정보를 작은 조각으로 나누고 무작위로 한 조각을 반환합니다.

으아악
大家讲道理

MD5를 사용해 보세요

Peter_Zhu

매번 다른 결과를 반환하고 싶다면 TripleDes를 사용할 수 있습니다

그런데 결과는 8자리 순수 숫자밖에 나오지 않아서 당황스럽습니다

Ty80

md5, openssl은 상대적으로 간단합니다

洪涛

최종 솔루션은 해싱 후 값의 일부를 차지합니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!