답변:
암호를 저장할 때와 거의 같습니다. 생성기와 프로그램에만 알려진 고유 한 비밀 키가 있어야합니다. 이 키를 사용하여 세부 사항 (사용자 이름, 비밀번호, 조직 등)을 조작 한 후 해시하십시오. 그런 다음 Base32 에서 해시에 대한 간단한 전송 인코딩을 수행 하거나 형식에 신경 쓰지 않으면 간단히 16 진수 문자열로 옮길 수 있습니다.
구현할 때주의해야 할 점이 있습니까?
비밀을 비밀로 유지하십시오. 구현을 즉흥적으로 만드십시오. 누군가가 깨지면 쉽게 구현을 변경할 수 있습니까? 데스크톱 응용 프로그램의 일반적인 구현 중 하나는 원격 서버를 사용하여 라이센스의 유효성을 검사하는 것입니다. 이렇게하면 응용 프로그램 자체를 검사하여 누군가 해시 또는 알고리즘을 리버스 엔지니어링 할 수있는 가능성이 사라집니다.
내가 선호하는 방법은 10,000 개의 임의 라이센스 문자열, SHA1 (또는 MD5) 해시 또는 HMAC를 생성하고 SHA1 / MD5 해시의 전부 또는 일부를 실행 파일 자체에 포함시키는 것입니다. 라이센스 문자열을 입력하면 난독 처리 된 코드를 사용하여 문자열의 해시를 생성하고 목록의 코드와 비교합니다. 일치하면 유효한 라이센스입니다. 라이센스가 부족한 경우 더 많은 문자열로 새 버전을 릴리스하십시오.
SHA1 해시의 첫 96 비트 만 사용하면 충분합니다. 따라서 10,000 개의 라이센스가 120KB 미만이됩니다. 알고리즘 키 생성 또는 키 생성기 생성은 불가능합니다. 걱정해야 할 유일한 취약점은 리버스 엔지니어링 또는 우회입니다. (또는 유효한 키를 배포 한 사람이 있습니다.)