거의 모든 WeChat 웹사이트는 특정 알고리즘에 따라 URL 주소에서 문자열을 생성한 다음 이를 짧은 도메인 이름에 추가하여 새 URL 주소를 형성하는 것이 원칙입니다. 이 짧은 주소와 원래 주소를 저장합니다. 사용자가 이 새로운 짧은 주소를 클릭하면 짧은 주소 서비스는 짧은 도메인 이름 뒤의 여러 문자열을 기반으로 데이터베이스에서 원래 주소를 읽은 다음 페이지로 이동합니다. .
예를 들어 Sina Weibo의 URL은 http://t.cn/xxxxxxx입니다. t.cn은 도메인 이름이고 그 뒤에 7자리 문자열이 옵니다.
방법 1: 해시 라이브러리를 활용해 알고리즘 맞춤화
텍스트에 너무 긴 URL을 표시하거나, 생략하는 방법을 사용하면 지저분해지기 때문입니다. 표시하거나 단축 URL 방식을 사용합니다.
클릭수 계산과 콘텐츠 필터링을 동시에 용이하게 하기 위해 단축 URL 값을 생성하는 방식을 구현했습니다.
해시 값이 크랙되는 것을 방지하기 위해 Add your own salt 시 md5 값을 생성할 수 있습니다.
이렇게 하면 code_map에 도달하더라도 원본 URL을 크랙할 수 없습니다.
결과를 더 무작위로 만들기 위해 각 루프에서 사용되지 않는 두 번째 비트를 e에 저장합니다. 이렇게 하면 결과 충돌 비율을 줄일 수 있습니다.
#引入哈希库 import hashlib def get_md5(s): s = s.encode('utf8') if isinstance(s, unicode) else s m = hashlib.md5() m.update(s) return m.hexdigest() code_map = ( 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' , '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' ) def get_hash_key(long_url): hkeys = [] hex = get_md5(long_url) for i in xrange(0, 4): n = int(hex[i*8:(i+1)*8], 16) v = [] e = 0 for j in xrange(0, 5): x = 0x0000003D & n e |= ((0x00000002 & n ) >> 1) << j v.insert(0, code_map[x]) n = n >> 6 e |= n << 5 v.insert(0, code_map[e & 0x0000003D]) hkeys.append(''.join(v)) return hkeys if __name__ == '__main__': print get_hash_key('http://www.pythontab.com')
방법 2: libsurl을 사용합니다. library
libsurl은 짧은 URL을 생성하는 데 사용되는 C 및 Python 라이브러리로, .ly 및tinyurl과 같은 비트 짧은 URL 서비스 웹사이트를 지원합니다.