Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
2,25 MB
Nội dung
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA VIỄN THÔNG I - - BÀI TIỂU LUẬN MÔN HỌC: AN NINH MẠNG THÔNG TIN ĐỀ TÀI: HÀM BĂM VÀ ỨNG DỤNG Bài thi cuối kì mơn ANM Bài thi cuối kì mơn ANM MỤC LỤC LỜI NÓI ĐẦU DANH MỤC HÌNH VẼ .6 I – HÀM BĂM Khái niệm hàm băm (Hash) Hàm băm mật mã Hoạt động hàm băm Tính chất hàm băm mật mã 4.1 Chống nghịch ảnh 4.2 Chống nghịch ảnh thứ hai 10 4.3 Chống xung đột 10 Những hàm băm 11 5.1 Hàm băm MD5 11 5.1.1 Giới thiệu .11 5.1.1 MD5 Python 11 5.2 Hàm băm SHA-1 12 5.2.1 Giới thiệu .12 5.2.2 SHA-1 Python 12 5.3 Hàm băm SHA-2 12 5.3.1 Giới thiệu .12 5.4 Hàm băm SHA-256 13 5.4.1 Giới thiệu .13 5.4.2 SHA-256 Python .13 5.5 Hàm băm SHA-512 13 5.5.1 Giới thiệu .13 5.5.2 SHA-512 Python .14 Bài thi cuối kì mơn ANM II - ỨNG DỤNG CỦA HÀM BĂM 14 Hàm băm xác minh tính tồn vẹn thơng điệp tập tin (HMAC) 14 1.1 Mơ hình tổng qt .14 1.2 Kiến trúc thuật toán .15 1.3 HMAC ngôn ngữ lập trình Python 16 Hàm băm xác minh mật 17 2.1 Mơ hình tổng qt .17 2.2 Demo ngôn ngữ lập trình Python 17 Hàm băm tạo xác nhận chữ ký số 18 3.1 Mơ hình tổng quan tạo chữ ký số RSA message digest .18 3.2 Thuật toán RSA 19 3.3 Sử dụng RSA ngôn ngữ lập trình python .20 Xác thực API FPTplay 22 KẾT LUẬN 28 TÀI LIỆU THAM KHẢO 29 KIỂM TRA DOIT .30 Bài thi cuối kì mơn ANM LỜI NĨI ĐẦU Hashing kỹ thuật quan trọng có tính ứng dụng cao, đặc biệt lĩnh vực bảo mật Những nhà phát triển liên tục phải thiết kế thuật toán Hash mới, thuật toán cũ nhanh chóng bị giải mã phát triến nhanh vũ bão cơng nghệ Một thuật tốn bị crack (bẻ khóa), khơng cịn an tồn tuyệt đối Hiểu thuộc tính cách thức hoạt động hàm băm việc cần thiết kĩ sư viễn thông công nghệ thông tin Nắm cần thiết đó, nhóm chúng em định chọn đề tài “Hàm băm ứng dụng” để tìm hiểu đưa vấn đề phổ biến hàm băm thực tế Mục đích tiểu luận nhằm tìm hiểu nghiên cứu ứng dụng hàm băm thực tế Phạm vi nghiên cứu tập chung vào phần Thứ định nghĩa tính chất hàm băm, thứ hai cách mà hàm băm ứng dụng công nghệ HMAC, xác minh mật khẩu, RSA, xác thực API FPTplay Phương pháp cách giải vấn đề Hàm băm: đề tài phổ biến, nhóm em tham khảo tài liệu slide giảng T.S Phạm Anh Thư, đồng thời kết hợp giáo trình An ninh mạng viễn thông số tài liệu khác internet để tổng hợp đưa lí thuyết dễ hiểu hàm băm Ứng dụng: phần ứng dụng hàm băm chủ yếu liên quan đến việc lập trình nên chúng em sử dụng ngơn ngữ lập trình Python để mơ ứng dụng hàm băm, đồng thời có phân tích sâu ứng dụng hàm băm thực tế triển khai website Qua đây, nhóm em xin gửi lời tri ân sâu sắc đến cô giáo Phạm Anh Thư Trong q trình tìm hiểu học tập mơn An ninh mạng viễn thông, chúng em nhận giảng dạy hướng dẫn tận tình, tâm huyết Cơ giúp chúng em tích lũy thêm nhiều kiến thức hay bổ ích Từ kiến thức mà truyền đạt, chúng em xin trình bày lại tìm hiểu vấn đề: Hàm băm ứng dụng gửi đến cô Tuy nhiên, kiến thức môn khả nghiên cứu chúng em hạn chế định Do đó, khơng tránh khỏi thiếu sót q trình hồn thành tiểu luận Kính mong xem xét góp ý để tiểu luận chúng em hồn thiện Nhóm em kính chúc sức khỏe, cơng tác tốt thành công nghiệp trồng người Em xin chân thành cảm ơn! Bài thi cuối kì mơn ANM DANH MỤC HÌNH VẼ Hình 1: Các khối liệu liên kết Hash Hình 2: Mơ hình thuật tốn băm Hình 3: Kết băm MD5 với đầu vào “Hello World” 11 Hình 4: Kết băm SHA-1 với đầu vào “Hello World” .12 Hình 5: Kết băm SHA-256 với đầu vào “Hello World” 13 Hình 6: Kết băm SHA-512 với đầu vào “Hello World” 14 Hình 7: Mơ hình tổng qt HMAC .14 Hình 8: Sơ đồ kiến trúc HMAC 15 Hình 9: Kết HMAC đầu 16 Hình 10: Mơ hình tổng qt sử dụng hàm băm để lưu trữ xác minh mật 17 Hình 11: Sử dụng hàm băm chứng thực mật 18 Hình 12: Mơ hình tổng quan chữ ký số RSA .18 Hình 13: Mơ hình mã hố giải mã RSA 19 Hình 14: API có sử dụng mã băm để xác thực 22 Hình 15: Đặt XHR/fetch breakpoint slug API phía trên, '/auto_vip' 23 Hình 16: Function call đên api tên apiCaller .23 Hình 17: Function gọi đến với param slug api user agent 24 Hình 18: Hàm băm MD5 javascript .25 Hình 19: Hàm c.a 25 Bài thi cuối kì mơn ANM I – HÀM BĂM Khái niệm hàm băm (Hash) Hashing trình biến đổi chuỗi liệu đầu vào có kích thước khơng cố định thành chuỗi đầu đặc trưng có kích thước cố định Q trình thực cách sử dụng hàm băm (hash function) Hàm băm hàm sử dụng để xử lý luồng liệu có kích thước tùy ý thành giá trị kích thước cố định Các giá trị đầu hàm băm gọi giá trị băm, mã băm, thông điệp băm, đơn giản “hash” Kỹ thuật hashing thường áp dụng ứng dụng rộng rãi việc đảm bảo tính tồn vẹn cho liệu Ví dụ hệ thống Blockchain, khối liệu liên kết với qua hàm băm mật mã (cryptographic hash function) chẳng hạn SHA-1 SHA-2 SHA-3, SHA-256… Theo đó, khối sau giữ giá trị băm khối trước để tạo nên chuỗi khối (blockchain) Chỉ cần chỉnh sửa nhỏ khối khiến chuỗi thay đổi theo, tính chất giúp blockchain trở nên đáng tin cậy Do mà hàm băm mật mã có số tính chất quan trọng phù hợp cho việc đảm bảo an tồn liệu [1] Hình 1: Các khối liệu liên kết Hash Thông thường, thuật tốn băm mã hóa thiết kế hàm băm chiều, nghĩa chúng chuyển đổi trở lại cách dễ dàng mà không u cầu nhiều thời gian tính tốn tài ngun Nói cách khác, dễ dàng tạo kết đầu từ liệu đầu vào, lại khó làm theo hướng ngược lại (suy ngược liệu đầu vào từ kết đầu ra) Nói chung, việc tìm kiếm liệu đầu vào khó, tính bảo mật thuật tốn băm cao Hàm băm mật mã Hàm băm mật mã hàm băm dùng việc mật mã hố Cũng giống hàm băm thơng thường, thuật tốn tốn học có chức ánh xạ liệu Bài thi cuối kì mơn ANM mang kích thước tùy ý thành chuỗi bit có kích thước cố định hay cịn gọi “giá trị băm”, “mã băm” “thơng điệp băm” Ngồi cịn đảm bảo tính chất hàm chiều nói phần trước Có nghĩa hàm mà thực tế suy ngược Từ giá trị băm đầu ra, suy ngược lại giá trị đầu vào để hashing thơng điệp băm vậy, khó để tìm ra, trừ sử dụng phương pháp công vét cạn (brute force) để thử hết toàn khả có thơng điệp đầu vào Tuy nhiên, có khả xảy đầu vào khác tạo đầu ra, trường hợp gọi “xung đột” Đây tính chất vô quan trọng hàm băm mật mã biến thành cơng cụ mật mã học đại Hình 2: Mơ hình thuật tốn băm Các hàm băm mật mã có nhiều ứng dụng lĩnh vực an tồn thơng tin Chúng sử dụng nhiều chữ ký số, mã xác thực thông điệp (MAC) hình thức xác thực khác Ngồi ra, chúng sử dụng tương tự hàm băm thơng thường, ví dụ để lập mục liệu bảng băm, lấy đặc trưng liệu, phát trùng lặp làm tổng kiểm tra để phát lỗi luồng liệu Hoạt động hàm băm Các thuật toán băm khác tạo kết đầu có kích thước khác nhau, sử dụng thuật tốn băm kích thước kết đầu cố định không đổi Giả sử, thuật tốn SHA-256 tạo kết đầu có kích thước 256 bit, thuật tốn SHA-1 ln tạo chuỗi có kích thước 160-bit Ví dụ, thực hashing từ “Binance” “binance” thuật tốn băm SHA-256 Bài thi cuối kì mơn ANM Đầu vào (plain text) Đầu (hashed text) Binance f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f71 1225191 binance 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c3 6624784b2 Bảng 1: Ví dụ hoạt động thuật tốn băm Có thể thấy, cần khác biệt nhỏ ký tự “B” “b” cho đầu giá trị băm khác biệt hoàn toàn Tuy nhiên, sử dụng SHA-256 nên kết đầu ln có kích thước cố định 256-bit (64 ký tự) - cho dù kích thước liệu đầu vào có khác Và hashing hai từ thêm nhiều lần kết đầu không đổi Tính chất hàm băm mật mã Qua ví dụ phần trước, rút tính chất Hàm băm mật mã đảm bảo: • Tính tất định: thơng điệp đầu vào ln tạo giá trị băm • Tính hiệu quả: khả xử lý băm nhanh chóng thơng điệp • Tính nhạy cảm: đảm bảo thay đổi nào, dù nhỏ liệu tạo khác biệt lớn giá trị băm hoàn toàn khác, khơng có liên hệ với giá trị băm cũ (hiệu ứng tuyết lở) Ngoài ra, với mục đích nhằm đảm bảo an tồn cho liệu, hàm băm mật mã cần phải có khả chịu tất loại cơng mã hóa biết trước Trong lý thuyết mật mã, mức độ an toàn hàm băm mật mã xác định qua thuộc tính sau: [2] 4.1 Chống nghịch ảnh Thuộc tính chống nghịch ảnh có liên quan đến khái niệm hàm chiều Hàm băm xem chống nghịch ảnh khả tìm liệu đầu vào từ kết đầu thấp Tính chất khác với chống xung đột, kẻ công sử dụng thuộc tính để suy đốn liệu đầu vào dựa kết đầu biết Trong đó, xung đột xảy tìm hai liệu đầu vào khác lại tạo kết đầu ra, liệu đầu vào sử dụng không quan trọng Bài thi cuối kì mơn ANM Thuộc tính chống nghịch ảnh quan trọng để bảo vệ liệu, mã băm thông điệp để chứng minh tính xác thực nó, mà khơng cần tiết lộ thông tin Trên thực tế, nhiều nhà cung cấp dịch vụ ứng dụng web lưu trữ sử dụng mật dạng mã băm thay dạng plain text 4.2 Chống nghịch ảnh thứ hai Không thể tìm liệu đầu vào 𝑚2 xung đột với liệu đầu vào 𝑚1 cho trước Nghịch ảnh thứ hai xảy trường hợp tìm thấy liệu đầu vào 𝑚2 mà tạo kết đầu giống với kết đầu liệu đầu vào khác 𝑚1 hệ thống Nói cách khác, cơng nghịch ảnh thứ hai tìm thấy xung đột, thay tìm hai liệu đầu vào ngẫu nhiên tạo mã băm, phải tìm liệu đầu vào mà tạo mã băm giống với mã băm liệu đầu vào khác biết Do vậy, hàm băm tránh xung đột có nghĩa tránh cơng nghịch ảnh thứ hai, nghịch ảnh thứ hai có nghĩa xung đột xảy 4.3 Chống xung đột Hai thông điệp khác 𝑚1 𝑚2 tạo giá trị băm Xung đột xảy hai hay nhiều liệu đầu vào khác tạo giá trị băm giống Do vậy, hàm băm xem chống xung đột tìm thấy xung đột Lưu ý xung đột tồn hàm băm đó, liệu đầu vào vơ hạn, chuỗi kết đầu hữu hạn Hay nói cách khác, hàm băm coi chống xung đột khả tìm ra xung đột mức thấp hàng triệu năm tính tốn để tìm thấy xung đột Bởi vậy, lý thuyết khơng có hàm băm hoàn toàn loại bỏ xung đột, số hàm đủ mạnh để xem chống xung đột (ví dụ SHA256) Trong số thuật tốn SHA, nhóm SHA-0 SHA-1 khơng cịn đảm bảo tính bảo mật người ta tìm thấy xung đột hai nhóm Hiện tại, hàm băm thuộc họ SHA-2 xem chống xung đột 10 Bài thi cuối kì mơn ANM Mơ hình thuật tốn mơ tả sau: - - B1: Thêm số vào phía cuối bên trái K để tạo chuỗi b bit K+( ví dụ K có chiều dài 160 bit b=512 cần thêm 44 số vào K) B2: XOR K+ với ipad để tạo khối b bit Si B3: Thêm M vào Si B4: Sử dụng hàm băm H cho luồng tạo bước B5: XOR K+ với opad để tạo khối b bit So B6: Thêm giá trị băm nhận bước vào So B7: Sử dụng hàm băm H với luồng tạo bước đưa kết 1.3 HMAC ngơn ngữ lập trình Python Sử dụng thư viện HASHLIB để sử dụng hàm băm sha-256, sử dụng thư viện HMAC để tốn giá trị hmac thơng qua hàm hmac.new số hàm phụ trợ Code: import hmac import hashlib import binascii message=input("Nhap ban tin: ") key="123456" byte_key = binascii.unhexlify(key) message = message.encode() result=hmac.new(byte_key, message,hashlib.sha256).hexdigest().upper() print("HMAC: "+result) Kết đầu ra: Hình 9: Kết HMAC đầu Nhóm 06: Hàm băm ứng dụng 16 Bài thi cuối kì môn ANM Hàm băm xác minh mật 2.1 Mơ hình tổng qt Hình 10: Mơ hình tổng quát sử dụng hàm băm để lưu trữ xác minh mật Khi người sử dụng đăng kí mật khẩu, giá trị băm mật tính hàm băm đó(MD5, hay SHA-1…) Giá trị băm lưu trữ vào file hay sở liệu 2.2 Demo ngơn ngữ lập trình Python Code: import uuid import hashlib def bam_matkhau(password): randNum = uuid.uuid4().hex return hashlib.sha256(randNum.encode() + password.encode()).hexdigest() + ":" + randNum def kiemtra_matkhau(matkhau_dabam, user_password): password, randNum = matkhau_dabam.split(":") return password == hashlib.sha256(randNum.encode() + user_password.encode()).hexdigest() new_pass = input("Vui long nhap mat khau: ") matkhau_dabam = bam_matkhau(new_pass) print("Gia tri luu co so du lieu la: " + matkhau_dabam) old_pass = input("Nhap lai mat khau de kiem tra: ") if kiemtra_matkhau(matkhau_dabam, old_pass): print("Mat khau chinh xac!!!") else: print("Mat khau sai!!!") Nhóm 06: Hàm băm ứng dụng 17 Bài thi cuối kì mơn ANM Kết quả: Hình 11: Sử dụng hàm băm chứng thực mật Hàm băm tạo xác nhận chữ ký số 3.1 Mơ hình tổng quan tạo chữ ký số RSA message digest Hình 12: Mơ hình tổng quan chữ ký số RSA - Message digest sử dụng để đảm bảo tính tồn vẹn thơng điệp truyền qua kênh khơng an tồn - Thông điệp mà Alice gửi sau qua hàm băm tạo message digest - Message digest gửi cho Bob - Bob nhận Message digest đồng thời message Alice - Bob tiến hành thực lại hàm băm thông điệp mà nhận từ Alice nhận messge digest - Bob tiến hành so sánh message digest với message digest nhận từ phía Alice Nhóm 06: Hàm băm ứng dụng 18 Bài thi cuối kì mơn ANM - Nếu trùng khớp thơng tin Alice gửi cho Bob xác, cịn ngược lại thơng tin bị chỉnh sửa giả mạo 3.2 Thuật toán RSA Thuật toán RSA thuật toán mang tên người nghiên cứu phát triển Ronal Rivest, Adi Shamir, Leonard Adleman vào năm 1977 Đồng thời cột mốc đánh dấu cho tiến vượt bậc lĩnh vực mật mã học Hình 13: Mơ hình mã hố giải mã RSA Hoạt động RSA dựa bước chính: sinh khố, chia sẻ khố, mật mã hố giải mật mã RSA: sinh khố Nhóm 06: Hàm băm ứng dụng 19 Bài thi cuối kì mơn ANM Chọn số ngun tố lớn p q (Độ phức tạp khoá K phụ thuộc độ lớn p q) Tính n = p*q Chọn p,q cho 2^i < n ≤ 2^(i+1) (với i kích thước khối) Tính (n) = (p-1)*(q-1) Tìm số e cho e nguyên tố với (n) Tính số d cho e*d = mod (n) (d nghịch đảo e phép modulo (n)) Khi ta có khố a Khố cơng khai: Ku(e,n) b Khố bí mật Kr(d,n) RSA: Mã hoá giải mã - Mã hoá o Mã hoá bảo mật: C = E(M, Ku) = M^e mod n o Mã hoá chứng thực: C = E(M, Kr) = M^d mod n - Giải mã o Giải mã bảo mật: M = C^d mod n o Giải mã chứng thực: M = C^e mod n 3.3 Sử dụng RSA ngơn ngữ lập trình python import math import os def euclid(m, n): if n == 0: return m else: r = m % n return euclid(n, r) def excute_euclid(a, b): r1 = a r2 = b s1 = s2 = t1 = t2 = while r2 > 0: q = r1 // r2 r = r1 - q * r2 r1 = r2 r2 = r s = s1 - q * s2 Nhóm 06: Hàm băm ứng dụng 20 Bài thi cuối kì môn ANM s1 = s2 s2 = s t = t1 - q * t2 t1 = t2 t2 = t if t1 < 0: t1 = t1 % a return (r1, t1) def gen_prime(count): while True: isprime = True for x in range(2, int(math.sqrt(count) + 1)): if count % x == 0: isprime = False break if isprime: break count += return count if name == ' main ': os.system("cls") p = gen_prime(1000) q = gen_prime(2000) print(f"p = {p}") print(f"q = {q}") n = p * q Pn = (p - 1) * (q - 1) key = [] for i in range(2, Pn): gcd = euclid(Pn, i) if gcd == 1: key.append(i) e = 313 r, d = excute_euclid(Pn, e) if r == 1: d = int(d) print(f"d = {d}") M = 99999 print(f'M = {M}') E = (M ** d) % n print(f"E = {E}") M1 = (E ** e) % n print(f"M' = {M1}") if M == M1: print("M = M1") else: print("M != M1") Nhóm 06: Hàm băm ứng dụng 21 Bài thi cuối kì mơn ANM Xác thực API FPTplay Hình 14: API có sử dụng mã băm để xác thực Có thể thấy API fptplay là: https://api.fptplay.net/api/v6.2_w/stream/vod/5e4565ff2089bd011c334948/0/a uto_vip?st=17X_PuG4sQ3ugYS8HRdGQ&e=1620010196419&device=Chrome(version:90) Ở thấy tham số API truyền lên server là: • st: Một giá trị chưa tìm được, search global khơng thấy, có lẽ lại phải render từ js • e: Giá trị timestamp • device: phiên trình duyệt Xem sơ qua có lẽ tham số st thứ ta cần tìm: Nhóm 06: Hàm băm ứng dụng 22 Bài thi cuối kì mơn ANM Hình 15: Đặt XHR/fetch breakpoint slug API phía trên, '/auto_vip' Reset lại trang để chạy vào breakpoint Vậy trình duyệt chạy đến url có chứa ‘/auto_vip’ dừng lại Nhưng function trước trình duyệt render xong mã st Và chuẩn bị request đến API khác Hình 16: Function call đên api tên apiCaller Chúng ta thử đặt breakpoint vào chỗ refresh lại trang xem Nhóm 06: Hàm băm ứng dụng 23 Bài thi cuối kì mơn ANM Hình 17: Function gọi đến với param slug api user agent Và ta thử đặt breakpoint vào chỗ return ra, refresh lại trang web Ta thấy dịng return e.st = Object(c.a)(Object(l.a)(u)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""), hàm return giá trị st thứ cần tìm kiếm Phân tích qua dịng xử lý qua function là: • Object(l.a)(u): có lẽ gọi đến function l.a biến truyền vào biến u Còn u nói sau biên • Object(c.a): hàm gọi đến hàm c.a param đẩu vào đầu hàm l.a nói • Cịn hàm replace sau thay đổi ký tự đi, nên quan tâm sau đc Nhìn vào phần ta thấy u tạo cách u = this.api_token + o + this.suffix + a; • this.api_token = WEBv6Dkdsad90dasdjlALDDDS (đã khởi tạo dịng trên) • o = Math.floor((new Date).getTime()) + 10800 (là thời gian cộng với 10800 thơi) • this.suffix = /api/v6.2_w/ (slug api) • a slug api, VD auto_vip Sau tìm u, tìm hàm xem gì, hàm l.a Nhóm 06: Hàm băm ứng dụng 24 Bài thi cuối kì mơn ANM Hình 18: Hàm băm MD5 javascript Tìm đến hàm l.a với biến đầu vào u hàm Và sử dụng hàm băm MD5 javascript Hình 19: Hàm c.a Về tổng thể, ta nghiên cứu hết tham số cần thiết để giả lập lại q trình băm fptplay để xác thức API Nhóm 06: Hàm băm ứng dụng 25 Bài thi cuối kì mơn ANM import hashlib import json import time from urllib.parse import urlencode import re import requests session = requests.Session() api_token = "WEBv6Dkdsad90dasdjlALDDDS" suffix = "/api/v6.2_w/" domain = "https://api.fptplay.net" def generate_stoken(path): a = int(time.time()) + 10800 o = path token = "%s%s%s%s" % (api_token, a, suffix, o) m = hashlib.md5() m.update(token.encode()) return encrypt(m.hexdigest()), a def encrypt(e): n = [] t = e.upper() r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" for o in range(int(len(t) / 2)): i = t[2 * o:2 * o + 2] num = '0x%s' % i n.append(int(num, 16)) def convert(e): t = "" n = o = i = [0, 0, 0] a = [0, 0, 0, 0] s = len(e) c = for z in range(s, 0, -1): if n > a[1] = ((3 & i[0]) > 4) a[2] = ((15 & i[1]) > 6) a[3] = (63 & i[2]) for v in range(4): t += r[a[v]] n = if n: for o in range(n, 3, 1): i[o] = for o in range(n + 1): a[0] = (252 & i[0]) >> a[1] = ((3 & i[0]) > 4) a[2] = ((15 & i[1]) > 6) a[3] = (63 & i[2]) t += r[a[o]] n += while n < 3: t += "=" Nhóm 06: Hàm băm ứng dụng 26 Bài thi cuối kì mơn ANM n += return t return convert(n).replace('+', '-').replace('/', '_').replace('=', '') class extractFptPlay(): def init (self, *args, **kwargs): self._url = kwargs.get("url") self._regex_url = r'''(?x)^((?:http[s]?|fpt):)\/?\/(?:www\.|m\.|)fptplay\.vn.*?\/xemvideo\/(?P.*?)(\/.*?tap\-(?P\d+)|(\.|$))''' self._session = session def run(self): return self.real_extract() def real_extract(self): mobj = re.match(self._regex_url, self._url) if not mobj: return "Invalid url." slug = mobj.group("slug") ep = mobj.group("ep") or movie_id = slug.split("-")[-1] path = 'stream/vod/%s/%s/auto_vip' % (movie_id, int(ep) - 1) token, timestamp = generate_stoken(path) url = '%s%s%s?' % (domain, suffix, path) + urlencode({ "st": token, "e": timestamp, }) info = session.get(url) return info.json() url = input(" - url >> ").strip() data = extractFptPlay( url=url).run() print(json.dumps(data, indent=4, ensure_ascii=False)) Nhóm 06: Hàm băm ứng dụng 27 Bài thi cuối kì mơn ANM KẾT LUẬN Thơng qua việc tìm hiểu đề tài “Hàm băm ứng dụng”, việc củng cố lại kiến thức hàm băm cô giáo dạy lớp khái niệm, đặc điểm, hoạt động hàm băm chúng em cịn có thêm kiến thức kĩ nghiên cứu ứng dụng hàm băm thực tế việc sử dụng hàm băm HMAC, xác minh mật khẩu, hay thực tế hàm băm ứng dụng website từ chúng em có thêm động lực cho trình học tập nghiên cứu sau Nhóm 06: Hàm băm ứng dụng 28 Bài thi cuối kì mơn ANM TÀI LIỆU THAM KHẢO [1] A Rosic, "Blockgeeks," May 2020 [Online] Available: https://blockgeeks.com/guides/what-is-hashing/ [2] C W E R Nathan Landman, "Brilliant," 24 June 2021 [Online] Available: https://brilliant.org/wiki/secure-hashing-algorithms/ [3] T Phan, "dancongngheorg," 29 August 2018 [Online] Available: https://dancongngheorg.wordpress.com/2018/08/29/cach-tao-ham-bam-voipython/ [4] D S R M B Madhuravani, "Cryptographic Hash Functions: SHA Family," International Journal of Innovative Technology and Exploring Engineering, vol 2, no 4, p 326, 2013 [5] M P G G R Philip Hawkes, On Corrective Patterns for the SHA-2 Family, New South Wales: Qualcomm Australia, 2004 Nhóm 06: Hàm băm ứng dụng 29 Bài thi cuối kì mơn ANM KIỂM TRA DOIT Nhóm 06: Hàm băm ứng dụng 30 ... hiểu hàm băm Ứng dụng: phần ứng dụng hàm băm chủ yếu liên quan đến việc lập trình nên chúng em sử dụng ngơn ngữ lập trình Python để mô ứng dụng hàm băm, đồng thời có phân tích sâu ứng dụng hàm băm. .. tìm hàm xem gì, hàm l.a Nhóm 06: Hàm băm ứng dụng 24 Bài thi cuối kì mơn ANM Hình 18: Hàm băm MD5 javascript Tìm đến hàm l.a với biến đầu vào u hàm Và sử dụng hàm băm MD5 javascript Hình 19: Hàm. .. cứu ứng dụng hàm băm thực tế việc sử dụng hàm băm HMAC, xác minh mật khẩu, hay thực tế hàm băm ứng dụng website từ chúng em có thêm động lực cho q trình học tập nghiên cứu sau Nhóm 06: Hàm băm ứng