찾다

 >  Q&A  >  본문

java - 需要一个加密,验证算法

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

}

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

}

有什么合适的算法?

PHPzPHPz2802일 전811

모든 응답(6)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-18 10:54:04

    으아아아

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


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

    으아아아

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:54:04

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

    으아악

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:54:04

    MD5를 사용해 보세요

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:54:04

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

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:54:04

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:54:04

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

    회신하다
    0
  • 취소회신하다