Xu Hướng 9/2023 # Hướng Dẫn Mã Hóa Mật Mã Vigenère Cipher Và Playfair Cipher Bằng Tay # Top 18 Xem Nhiều | Englishhouse.edu.vn

Xu Hướng 9/2023 # Hướng Dẫn Mã Hóa Mật Mã Vigenère Cipher Và Playfair Cipher Bằng Tay # Top 18 Xem Nhiều

Bạn đang xem bài viết Hướng Dẫn Mã Hóa Mật Mã Vigenère Cipher Và Playfair Cipher Bằng Tay được cập nhật mới nhất tháng 9 năm 2023 trên website Englishhouse.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

Mật mã vigenere là gì?

Mật mã Vigenère là một phương pháp mã hóa văn bản bằng cách sử dụng xen kẽ một số phép mã hóa Caesar khác nhau dựa trên các chữ cái của một từ khóa. Nó là một dạng đơn giản của mật mã thay thế dùng nhiều bảng chữ cái.

Nguồn: Wikipedia.

Vigenere cipher example

Ví dụ: Bài tập Cho chuỗi Plaintext P: “THUONG MAI DIEN TU” . Trình bày các bước mã hóa chuỗi đã cho với vigenere cipher

Biết rằng keyword là “MINH” . Trích đề thi môn An toàn bảo mật thương mại điện tử – UIT – năm 2023

Bước 1: Điền Keyword dưới chuỗi Plaintext P và lặp lại ta có:

Hàng 1: T H U O N G M A I D I E N T U

Hàng 2: M I N H M I N H M I N H M I N

Bước 2: Lấy một chữ cái ở hàng 2 ứng với một chữ cái ở hàng 1 và dựa vào bảng sau để tìm ra chữ cái tương ứng.

Kết luận:

Plain text: THUONG MAI DIEN TU

Cipher text; FPHVZO ZHU LVLZ BH

Mật mã Playfair là một hệ mã hóa nhiều chữ, giảm bớt tương quan giữa văn bản mã hóa và nguyên bản bằng cách mã hóa đồng thời nhiều chữ cái của nguyên bản. Cơ chế hoạt động như sau: sử dụng một ma trận chữ cái 5×5 trên cơ sở một từ khóa: điền các chữ cái của từ khóa (bỏ các chữ trùng), điền những vị trí còn lại của ma trận với các chữ cái khác của bảng chữ cái; I, J có thể ở trên cùng một ô của ma trận.

Nguồn : Wikipedia

Playfair cipher example

Ví dụ: Bài tập Cho chuỗi Plaintext P: “THUONG MAI DIEN TU” . Trình bày các bước mã hóa chuỗi đã cho với playfair cipher

Biết rằng keyword là “MINH”. Trích đề thi môn An toàn bảo mật thương mại điện tử – UIT – năm 2023

Bước 1: Loại bỏ letter J, thêm keyword “MINH” vào ma trận sau đó thêm lần lượt các chữ cái trong bảng bảng chữ cái alphabet vào ma trận; chữ cái nào trùng với keyword thì bỏ qua, ta được ma trận X sau:

Bước 2: Tách các chữ cái trong chuỗi P theo cặp, thêm X vào các cặp trùng và tiếp tục tách (nếu có) . Ta được:

TH UO NG MA ID IE NT UX

Bước 3:

Áp dụng nguyên tắc duói đây cho chuỗi P và ma trận X

TH1: Nếu 2 chữ nằm cùng hàng, thay bởi các chữ bên phải

TH2: Nếu 2 chữ nằm cùng cột, thay bởi các chữ bên dưới

TH3: Các trường hợp khác, mỗi chữ cái được thay bởi chữ cái khác cùng hàng, trên cột chữ cái cùng cặp

Ta được:

Kết luận: Cipher Text: YETPMLIMNCHCHSSZ

Kết quả test online:

Thực Hành Thuật Toán: Mã Hóa Mật Mã Caesar

Bộ mã hóa mật mã Caesar là phần tiếp theo trong loạt hướng dẫn về các vấn đề thuật toán của chúng tôi. Được phân loại là một thuật toán “dễ dàng” trên các trang web như Leetcode , đây là một vấn đề kinh điển khác thường xuất hiện trong các cuộc phỏng vấn kỹ thuật và là phương pháp hay cho bất kỳ Kỹ sư phần mềm nào muốn trau dồi kỹ năng giải quyết vấn đề của họ.

Src: Cộng đồng IBM

Thông tin lai lịch

Đầu tiên, một số thông tin cơ bản về Mật mã Caesar để chúng ta biết những gì chúng ta đang xử lý. Mật mã Caesar là một ví dụ đơn giản về mật mã , được Merriam-Webster định nghĩa là

: giải mã và giải mã thông điệp trong mã bí mật hoặc mật mã

cũng : mã hóa và giải mã thông tin bằng máy tính.

Src: Hướng dẫn học Julius Caesar

Bộ mã hóa mật mã Caesar

Bây giờ chúng ta đã có một số thông tin cơ bản về Caesar Cipher và cách thức hoạt động của nó, chúng ta có thể chuyển sang xem xét vấn đề thuật toán thực tế. Cho một chuỗi không trống bao gồm các chữ cái thường và một khóa (một số nguyên không âm) chỉ định bao nhiêu vị trí trong bảng chữ cái để dịch chuyển mỗi chữ cái trong chuỗi, nhiệm vụ của chúng ta là viết một hàm trả về chuỗi được mã hóa. Chúng tôi muốn các chữ cái bao quanh bảng chữ cái; zchuyển một chỗ nên trả lại thư a.

Bây giờ chúng ta hãy suy nghĩ về vấn đề theo quan điểm khái niệm trước khi bắt đầu viết mã. Chúng ta biết rằng chúng ta cần phải dịch chuyển một cách có hệ thống mỗi chữ cái của chuỗi nhập vào một số vị trí nhất định. Làm thế nào chúng ta có thể tìm ra cách ánh xạ từng chữ cái thành một số để chúng ta có thể biểu thị nhất quán từng chữ cái và cũng có thể dễ dàng chuyển từng chữ cái bằng phím đã cho? Chúng ta có thể thực hiện việc ánh xạ các chữ cái thành số của riêng mình, lưu trữ hệ thống ánh xạ của chúng ta trong một đối tượng mà khóa là số nguyên và giá trị là chữ cái tương ứng của nó, nhưng có phương pháp nào dễ dàng hơn không? May mắn cho chúng tôi là có.

JavaScript, giống như nhiều ngôn ngữ lập trình khác, có một chức năng cho phép chúng ta có được giá trị Unicode của một bức thư: charCodeAt(). Chức năng tích hợp nhỏ tiện dụng này sẽ cho phép chúng tôi tạo một hệ thống ánh xạ cho bảng chữ cái một cách hiệu quả.

Được rồi, hoàn hảo. Bây giờ chúng tôi đã sắp xếp hệ thống lập bản đồ của mình, chúng tôi cần phải suy nghĩ về hậu cần.

Hãy khởi tạo một mảng trống trong đó chúng ta có thể giữ kết quả của mình – chúng ta sẽ gọi mảng này newLetters. Chúng ta có thể lặp lại thông qua chuỗi được truyền vào và đối với mỗi ký tự của chuỗi, chuyển đổi ký tự bảng chữ cái thành giá trị unicode của nó. Sau đó, chúng ta có thể thêm khóa (đại diện số của số lượng nơi chúng ta đang chuyển chữ cái của mình) vào giá trị unicode để nhận giá trị unicode của chữ cái mới. Sau đó, chúng ta sẽ muốn sử dụng hàm tích hợp JavaScript String.fromCharCode()để chuyển đổi các giá trị unicode trở lại thành chuỗi. Bước cuối cùng, chúng ta có thể đẩy kết quả của mình vào mảng newLetters và sau đó nối các phần tử mảng của chúng ta lại với nhau thành một chuỗi để có câu trả lời cuối cùng.

Những điều cần lưu ý

Không quá phức tạp, nhưng chúng tôi sẽ muốn ghi nhớ một vài điều quan trọng. Trước tiên, sẽ rất hữu ích khi biết rằng giá trị unicode alà 97 và giá trị unicode zlà 122. Giá trị unicode của chúng tôi phải nằm trong khoảng từ 97 đến 122 để nằm trong bảng chữ cái.

Để đảm bảo rằng các chữ cái của chúng ta quấn quanh bảng chữ cái (nghĩa là, z dịch chuyển qua 1 vị trí là a), nếu giá trị unicode lớn hơn 122, chúng ta sẽ sử dụng toán tử modulo để buộc nó thành giá trị dưới 122. Vì abằng 97, sau đó chúng tôi thêm số kết quả từ việc sử dụng toán tử modulo ở bước trước với 96 để kết thúc bằng một giá trị tương ứng với một chữ cái trong bảng chữ cái.

Là một biện pháp bảo vệ khác chống lại việc lấy một số lượng lớn, chúng ta cũng có thể buộc khóa thành một số có thể quản lý được. Vì bảng chữ cái tiếng Anh được tạo thành từ 26 chữ cái, chúng ta biết rằng việc chuyển các chữ cái theo 26 vị trí sẽ đưa chúng ta đến cùng một nơi chính xác mà chúng ta bắt đầu, đánh bại mục đích của mật mã. Vì vậy, chúng ta có thể sử dụng toán tử modulo để đảm bảo khóa thấp hơn 26.

Mã kết quả

Bây giờ chúng ta đã xem qua khái niệm về giải pháp, hãy dành một giây ở đây để suy nghĩ về cách thực sự mã hóa vấn đề này. Đây là cách mã của tôi trông như thế nào:

Tại Sao Cần Mã Hóa Mật Khẩu ? Và Các Kiểu Mã Hóa Cơ Bản

Lời mở

Gần đây trên mấy blog hay trang báo chúng ta có thể dễ đọc được tin vụ Lotte lộ tài khoản và mật khẩu người dùng và thấy bảo rất nguy hiểm vậy nguy hiểm ở mức nào và liệu người dùng đổi mật khẩu ở lotte thì còn có an toàn không?. Theo mình thì nguy hiểm vl (very lắm) luôn bởi lẽ thứ nhất là người dùng đã bị lộ thông tin cá nhân và có thể bị dùng thông tin đó cho mục đích ko hay nào đó như spam chẳng hạn. Nhưng nguy hiểm nhất vẫn là bị lộ mật khẩu vì thói quen người dùng thường dùng chung mật khẩu cho nhiều trang web do đó nếu lộ ở trang Lotte thì những đối tượng xấu có thể đơn giản chạy con crawler sang các trang khác với email/tài khoản + password trong đống dữ liệu đó và người dùng có thể mất nhiều thứ hơn.

OK nói đến đây thì chắc hẳn ai cũng biết để đảm bảo an toàn chúng ta cần mã hóa mật khẩu. Nếu bạn nào hay code Rails mà để ý khi chúng ta dùng gem Devise để đăng nhập thì trong db sẽ không có trường mật khẩu mà thay vào đó là trường mật khẩu mã hóa (encrypted_password) với nội dung ví dụ "$2a$10$H3pCAbs2zO1lY5ZtOKe6a.cmBZ0f9axdaNakzvyjzyDpDwDtTdicO" và giả sử mật khẩu người dùng là abc123. Thì đây chính là đoạn mã Hash của mật khẩu abc123 đó. Khi người dùng đăng nhập lại thì mật khẩu họ nhập vào sẽ bị mã hóa thành chuỗi kí tự như trên và so sánh với encrypted_password đã lưu trong db để xác thực mật khẩu đúng hoặc sai. Điều này đạt được là dựa vào đặc tính cơ bản của mã hóa hash này đó là tính 1 chiều ( là khả năng không bị dịch ngược đoạn encrypted_password thành password) và tính duy nhất tức là từ 1 đoạn mã text đầu vào thì chỉ cho ra 1 đoạn mã output duy nhất. Ngoài ra còn có rất nhiều các đặc tính khác mà tôi sẽ nói ở sau đây, đồng thời tôi sẽ lý giải tại sao dùng hash mà không phải các thuật toán mã hóa khác

Các Định nghĩa cơ bản của mã hóa cho anh em dev

Hỏi: mã hóa là gì?

Đáp: mã hóa là sử dụng các thuật toán để đảm bảo an toàn nội dung cho một đối tượng nào đó 2.Hỏi: Chọn lựa phương pháp mã hóa như nào là hợp lý?

Đáp: có thể đoan giản dựa vào 2 yếu tố :

lượng thông tin cần mã hóa

mục đích việc mã hóa:

tính bảo mật – Confidentiality?

Tính toàn vẹn – Integrity?

tính xác thực – Authenticity?

Chống chối từ (đại khái là đảm bảo thông tin gửi đi từ nguồn nào xác thực mà ko thể chối cãi) Non-repudiation? Deniability? (These two are opposites.)

Note: đừng bao giờ tự sáng tạo kiểu mã hóa của riêng mình khi bạn chưa nắm rõ

Như tôi đã nói ở trên các phương pháp mã hõa cần đảm bảo rất nhiều các yếu tố do đó chỉ nên viết phương pháp mã hóa khi bạn là chuyên gia và chứng minh là nó đủ tốt để dùng, còn không thì hãy cứ dùng những cái đã có sẵn vì nó đã đủ tốt và kiểm tra kĩ lưỡng để sử dụng rồi.

Sơ đồ chung của các pp mã hóa

Ta có thể thấy phần mã hóa gồm các mảng chính sau

Keyless Cryptography (0 keys)

Secret-Key Cryptography (1 key)

Secret-Key Message Authentication

Secret-Key Encryption

Authenticated Secret-Key Encryption

Public-Key Cryptography (2 keys)

Shared Secret Key Agreement

Digital Signatures

Keyless Cryptography / mã hóa không dùng key

Đơn giản nhất trong mã hóa đó là dùng Hàm Hash với chỉ 1 input đầu vào và sẽ luôn trả ra 1 đoạn ký tự đầu ra với chiều dài cố định

hash("sha256", "");

và khi bạn thay đổi nội dung input dù là rất nhỏ thì kết quả ouput cũng sẽ thay đổi khác hoàn toàn

hash("sha256", "The quick brown fox jumps over the lazy cog");

Các mã hóa thường dùng như sha256, MD5, BLAKE2 … Ưu điểm của phương pháp này đó là tốc độ nhanh, mã hóa theo 1 chiều và không thể giải mã ngược lại. Tuy nhiên ở mã hóa MD5 tính bảo mật lại khá yếu do size oupt sinh ra bé nên người ta có thể tính toán ra 1 đoạn mã tương tự có thể sinh ra ouput giống với input gốc (các bạn tự liên hệ risk khi dùng MD5 mã hóa password lưu trong db và để lộ db).

Tác dụng của phương pháp này chủ yếu là dùng để xác thực tính toàn vẹn của file / mesage (khi bạn down load các file lớn trên mạng về máy thì thường có thêm 1 đoạn mã MD5 cái này là để bạn check lại mã MD5 sinh ra với file bạn down về và với dữ liệu gốc, nếu đoạn mã MD5 là giống nhau tức là file bạn down về giống với file gốc còn nếu sai thì tức là trong lúc tải file về bạn đã bị mất mát dữ liệu)

Secret Key Cryptography / Mã hóa bằng khóa bí mật

Đây là kiểu mã hóa mà input vào ngoài dữ liệu còn có thêm 1 đoạn mã key bí mật mà không bị public ra bên ngoài

Keyed Hash Functions

Đây là kiểu mã hóa dùng hàm hash nhưng có thêm 1 giá trị key nhằm tạo ra 1 message_authentication 1 trong phương pháp hay dùng đó là HMAC

hash_hmac("sha256", "The quick brown fox jumps over the lazy dog", "secret key");

Phương pháp này thì được đánh giá an toàn hơn hash thường vì có key bí mật và chỉ ai có key thì mới có thể tính toán được đoạn mã xác thực sau khi mã hóa ngược lại đoạn nội dung và so sánh với mã xác thực đi kèm nhằm đảm bảo tính toàn vẹn của dữ liệu nhận được.

Secret Key Encryption – mã hóa key bí mật

Đơn giản mà nói thì đây là kiểu mã hóa dùng một key bí mật mà đảm bảo dùng key này ta có thể mã hóa dữ liệu (plain text) thành 1 đoạn mật mã (ciphertext) và đồng thời có thể khôi phục được duy nhất toàn bộ dữ liệu từ đoạn mã hóa kia. Tuy nhiên kiểu đơn giản (như kiểu ECB mode) như này thì sẽ không an toàn cho 1 số trường hợp ví dụ khi bạn mã hóa 1 đoạn (16bytes) các ký tự giống nhau thì đoạn mã hóa trả ra cũng sẽ bị lặp lại.

Do đó mã hõa dùng key bí mật hiện đại ngày nay ngoài 2 trường trên người ta đã thêm 1 trường mới là vecto khởi tạo IV (Initialization Vector) hoặc nonce (1 số ngẫu nhiên dùng 1 lần). Trong mã hóa này thì trường key sẽ cần bảo mật 2 trường IV, nonce thì sẽ lưu trong đoạn mã gửi đi.

Authenticated Secret-Key Encryption – Mã hóa key xác thực

Đây là phương pháp kết hợp 2 cách trên. Đó là luôn mã hóa bằng key kết hợp với việc dung 1 key khác để xác thực nội dung đoạn mã hõa thông qua tính toán ra giá trị MAC dựa vào giá trị đoạn mã hóa truyền vào

Việc mã hóa này đảm bảo tính an toàn đó là đoạn mã chỉ có thể được giải mã đúng khi dùng đúng key và tính toàn vẹn, xác thực của nội dung đoạn mã nhận được

Public Key Cryptography / Mã hóa bằng public key

Để mô tả 1 các đơn giản các bạn có thể xem ở hình sau

như các bạn thấy ở đây nó khác so với dùng 1 key bí mật ở phần trên, ở đây ta dùng tới 4 key Đầu tiên là 2 key bí mật của từng người mà ko được chia sẻ cho bất cứ ai (lưu ý ko được chia sẻ cho bất cứ ai) và 2 key public tương ứng với 2 key bí mật, 2 key public này được thông báo tới bất cứ ai

Với điều kiện dựa vào private key ta có thể tính toán ra được public key tuy nhiên chiều ngược lại là ko được ta không thể dựa vào public key để tính ra giá trị của private key, điều này đảm bảo tính bảo mật của private key là chỉ duy nhất người tạo ra key biết. Phương thức hoạt động của kiểu mã hóa này đó là 2 người sẽ trao đổi public key cho nhau.

Sau đó khi A muốn gửi dữ liệu sang bên B thì A sẽ gửi dữ liệu bị mã hóa bới public key của B (key đã được chia sẻ ở bước trước) sang B, sau đó B sẽ dùng private key của mình để giải mã dữ liệu. Tính bảo mật dữ liệu ở đây được đảm bào là nhờ dữ liệu sau khi được mã hóa bằng public key của B thì chỉ có dùng private key của B mới giải mã được, mà khóa private B được giữ bởi duy nhất B nên không ai có thẻ giải mã được đoạn mã hóa bằng publib key B.

Khi B gửi dữ liệu sang A thì cũng dùng các tương ứng là mã hóa dữ liệu bằng public key của A.

Tuy nhiên hash password khác Hash cơ bản vì nó cần đảm bảo thêm nhiều điều kiện để đảm bảo tính an toàn

Lời kết

Đây chỉ là những kiến thức cơ bản của mã hóa, hi vọng là các bạn đã có thêm những kiến thức mới về bảo vệ an toàn thông tin

Tham khảo : https://paragonie.com/blog/2023/08/you-wouldnt-base64-a-password-cryptography-decoded

All Rights Reserved

Hướng Dẫn Đọc Và Giải Mã Qr Code Bằng C#

1. Đọc mã QR Code

Mã QR Code thật ra là một hình ảnh được tạo ra từ dữ liệu và một thuật toán để chuyển dữ liệu đó sang hình ảnh, nếu muốn tìm hiểu rõ hơn về thuật toán các bạn có thể search trên google để biết thêm, thật ra mình không nắm rõ thuật toán của nó, mình chỉ sử dụng thuật toán đọc trên internet thôi, còn đây là thư viện mà mình dùng để đọc và giải mã QR Code http://zxingnet.codeplex.com/, cái thư viện này có thể hỗ trợ winphone nếu bạn nào viết ứng dụng cho winphone có thể tham khảo link trên, mình không chuyên viết ứng dụng cho winphone nên không rõ cho lắm, khi nào có dịp mình sẽ tìm hiểu thêm, hoặc bạn nào có kinh nghiệm có thể chia sẽ cùng mọi người.

Sau khi tải thư viện Zxing cho .NET các bạn reference dll của nó và project của mình sau đó gọi hàm để sử dụng thôi, vậy hàm đọc mã QR Code của ZXing như thế nào và cách sử dụng ra sao?

Mã nguồn: https://github.com/thangdc/qr-code-generator

Bước 1: Bạn hãy reference những namespace sau vào project.

Bước 2: Khởi tạo đối tượng trước khi sử dụng thư viện ZXing

Bước 3: Khi ứng dụng được khởi chạy bạn khởi tạo đối tượng barcodeReader

Bạn có thể bỏ nó trong Constructor hoặc hàm Load của Form

barcodeReader = new BarcodeReader();

Bước 4: Tại sự kiện khi người dùng nhấn vào nút “Giải mã” bạn hãy viết đoạn code sau:

Đoạn code sau dùng để mở một hình chứa mã QR code mà người dùng sẽ chọn, sau khi chọn xong mã bạn hãy chuyển nó sang dạng Bitmap để cho thư viện Zxing xử lý, hoặc bạn dùng Bitmap này để hiện ra PictureBox cho người dùng nhìn thấy, sau đó bạn gọi hàm Decode với tham số là bitmap mà bạn chọn, sau đó nhận kết quả trả về từ XZing và hiện kết quả này lên textbox

Vậy là xong việc giải mã QR Code từ một hình ảnh, sau khi có kết quả bạn có thể xử lý kết quả tùy theo định dạng mà nó được mã hóa mà có cách giải mã phù hợp (đa số các mã QR Code là ở dạng văn bản, tức là khi đọc xong bạn giải mã là sẽ có ngay được nội dung mình cần và hiển thị, tuy nhiên có một số mã QR Code được mã hóa, sau đó mới mã hóa bằng QR Code nên dữ liệu khó đọc và bạn sẽ không hiểu nó là cái gì luôn)

2. Tạo mã QR Code

Do bước 1 bạn đã thực hiện các thao tác khởi tạo nên bạn chỉ cần bắt đầu từ bước 3, tại sự kiện khi người dùng nhấn vào nút “Mã hóa” bạn hãy viết đoạn code sau:

Ý tưởng của đoạn mã là bạn nhập một nội dung bất kỳ, sau đó sử dụng thư việc ZXing để tạo ra một đối tượng bitmap, từ đối tượng bitmap này bạn có thể hiển thị ra cho người dùng bằng cách dùng Picturebox hoặc lưu đối tượng này ra tập tin hình ảnh.

Mật Mã Học: Phần 1

Khái niệm mã hóa dữ liệu và giải mã

Mã hóa dữ liệu là tiến trình che dấu dữ liệu thật (plaintext), nghĩa là chuyển dữ liệu thật thành dữ liệu không có ý nghĩa hoặc có ý nghĩa khác xa với dữ liệu thật. Tiến trình đó gọi là mã hóa (encrytion). Kết quả của tiến trình gọi là bản mã (ciphertext). Từ “encrytion” được tạo ra từ “cryptography” (mật mã) xuất phát từ tiếng Hi Lạp cổ xưa “Kryptos” (Che dấu) và từ “graphia” (viết). Tiến trình mã hóa dữ liệu có thế được thực hiện bằng cách hoán vị dữ liệu thật hoặc thay thế chúng bằng dữ liệu khác.

Tiến trình ngược với tiến trình mã hóa tức là chuyển từ bản mã thành dữ liệu ban đầu gọi là giải mã.

Hệ mã Caesar

Trong mật mã học, mật mã Caesar (Xê da), còn gọi là mật mã dịch chuyển, là một trong những mật mã đơn giản và được biết đến nhiều nhất. Hệ mã Caesar là một hệ mã hóa thay thế đơn âm, làm việc trên bẳng chữ cái tiếng Anh 26 ký tự. Đó là một dạng của mật mã thay thế, trong đó mỗi ký tự trong văn bản được thay thế bằng một ký tự cách nó một đoạn trong bảng chữ cái để tạo thành bản mã.

Ví dụ:

Đối với bảng mã tiếng anh (ABCDEFGHI…), nếu độ dịch là 3, A sẽ được thay bằng D, B sẽ được thay bằng E, …, W sẽ thay bằng Z, X sẽ thay bằng A, Y sẽ thay bằng B và Z thay bằng C. Phương pháp được đặt tên theo Caesar, vị hoàng đế đã sử dụng nó thường xuyên trong công việc. Không gian bản rõ P là các từ cần được mà hóa được tạo từ bảng chữ cái A. Không gian bản rỏ C là các từ đã được mã hóa.

Để mã hóa, người ta đánh số các chữ cái từ 0N-1 (N là tổng số phần tử của bản chữ cái). Không gian khóa K=ZN. Với mỗi khóa K  K hàm mã hóa và giải mã một ký tự có số thứ tự là I sẽ được biểu diễn như sau:

a. Mã hóa : EK(i) = (i+k) mod N b. Giải mã : DK(i) = (i-k) mod N

Trong đó:N = 26 nếu hệ mã Caesar sử dụng trên bảng chữ cái tiếng Anh (nếu sử dụng trên bảng chữ cái khác thì N sẽ thay đổi). k : tương ứng với số thứ tự chữ cái trong bảng mã (ví dụ : a = 0, b = 1 ….)

Xét ví dụ sau: Cho bản rõ : TOIYEUVIETNAM Khóa k = 4

Tìm bản mã ? Theo công thức thay vào ta sẽ có kết quả sau.

Vậy bản mã là : YSMBYZWMIYREQ

Quá trình giải mã thì ngược lại với quá trình mã hóa.

Cài đặt

Mỗi ngôn ngữ khác nhau sẽ có cách cài đặt khác nhau. Mình sẽ sử dụng Python để cài đặt thuật toán:

Mặc định bạn có thể dụng bảng chữ cái Tiếng Anh nhưng trong phần cài đặt này. Để thực tế hơn. Mình sẽ sử dụng bảng mã Tiếng Việt.

1. Bảng mã key = 'aáàạảãăắằặẳẵâấầậẩẫbcdđeéẹẻẽêếềệểễfghiíìịỉĩjklmnoóòọỏõôốồộổỗơớờợởỡpqrstuúùụủũưứừựửữvwxyýỳỵỷỹAÁÀẠẢÃĂẮẰẶẲẴÂẤẦẬẨẪBCDĐEÉẸẺẼÊẾỀỆỂỄFGHIÍÌỊỈĨJKLMNOÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠPQRSTUÚÙỤỦŨƯỨỪỰỬỮVWXYÝỲỴỶỸ0123456789`[email protected]#$%^&*()' 1. Hàm mã hóa

Nếu đã đọc xong đống lý thuyết bên trên thì chắc hẳn bạn sẽ không gặp khó khăn gì trong đoạn code cài đặt trên:

Mã hóa : EK(i) = (i+k) mod N

Trong đó:

2. Hàm giải mã

Áp dụng với công thực giải mã. Ta cũng sẽ viết được hàm tương tự.

3. Gọi hàm Tài liệu

Đến đây bài viết phần đầu về mã hóa cũng kết thúc. Mong rằng anh chị em đừng gạch đã nhiều quá. Và đưa ra những góp ý nhiều hơn để em có thể vững tâm trong quá trình tìm hiểu các hệ mã hóa .

Mọi người nếu lười cài đặt cũng có thể tham khảo link github bài em đã làm sẵn. Chỉ việc kéo về và chạy https://github.com/tuanquanghpvn/cipher

All Rights Reserved

Hướng Dẫn Dịch Ngược Code Bị Mã Hóa Trong Template

Chào các bạn! Các bạn đã bao giờ gặp một template bị mã hóa code tránh sửa bản quyền chưa? Nếu bạn là người hay sử dụng template Free – Đặc biệt là blogspot thì gặp hoài phải không.

Tuy vậy, mình cũng hi vọng các bạn sẽ tôn trọng tác giả mà chỉ xóa đi link web bản quyền hoặc để ở chế độ nofollow thay vì dofollow (1 kiểu để spider google về website được liên kết và tạo backlink).

Ok, giờ chúng ta đi vào chi tiết, mình sẽ không ví dụ cụ thể 1 template hay 1 website nào cả, mình chỉ lấy ví dụ 1 đoạn mã javascript trong website làm bằng blogspot của mình thôi (*):

Bạn nhìn có bị choáng không :D. Bởi vì các đoạn code đã được mã hóa Hex nên bạn mới thấy rối rắm như vậy. Không sao, tiếp theo các bạn truy cập trang web sau đây.

Đây là kết quả của mình với đoạn mã trên (**):

Nhìn vào chắc bạn có thể hiểu được code một chút rồi đúng không? Bây giờ chúng ta sẽ thay 1 đoạn code nào đó trong đoạn mã (**) mà chúng ta đã dịch được. Bạn có thấy dòng chữ “congvietit” không? Giờ ta sẽ thay đoạn đó bằng cách:

Chúng ta sẽ truy cập tiếp vào trang này.

Nhập từ khóa “congvietit”và nhấn Encode. Sau đó chúng ta sẽ có một đoạn mã Hex. Công việc tiếp theo là cứ trước 2 ký tự chúng ta thêm ký tự “x” và chúng ta được (***):

x63x6Fx6Ex67x76x69x65x74x69x74

Chúng ta copy đoạn mã vừa mã hóa Hex (***) và tìm đoạn tương tự trong đoạn code chưa mã hóa (*) của chúng ta ở trên.

Sau khi tìm được đoạn code đã bị mã hóa tương ứng với từ “congvietit” chúng ta sẽ quay lại trang mã hóa Hex và chúng ta mã hóa từ cần thay thế, ví dụ mình chọn từ “CongVietIT”, sau khi mã hóa và thêm ký tự “x” mình được (****):

x43x6Fx6Ex67x56x69x65x74x49x54

Giờ mình chỉ cần copy đoạn code (****) này thay thế đoạn code đã mã hóa (***) của từ “congvietit” trong đoạn code (*) ban đầu rồi lưu lại là xong.

Nếu các bạn có bất cứ thắc mắc gì hãy để lại “Bình Luận” và mình sẽ giúp các bạn giải đáp thắc mắc.

3

2

đánh giá

Đánh giá

Cập nhật thông tin chi tiết về Hướng Dẫn Mã Hóa Mật Mã Vigenère Cipher Và Playfair Cipher Bằng Tay trên website Englishhouse.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!