Cách giải mã Vigenère

Các Mật mã Vigenère là một mật mã polyalphabetic đơn giản mà về cơ bản áp dụng một trong những thuật toán mật mã Caesar, theo một chìa khóa. Về cơ bản các chữ cái trong khóa cho biết bảng chữ cái nào được sử dụng. Cuối cùng, có một công cụ đơn giản, được gọi là hình vuông Vigenère:

Cách giải mã Vigenère

Ở đây mỗi hàng là một bảng chữ cái riêng, bắt đầu bằng chữ cái tương ứng của khóa. Các cột sau đó được sử dụng để xác định chữ cái được mã hóa. Giải mã hoạt động rất giống nhau, chỉ ngược lại.

Giả sử chúng ta muốn mã hóa chuỗi CODEGOLF. Chúng tôi cũng cần một chìa khóa. Trong trường hợp này, chìa khóa sẽ là FOOBAR. Khi khóa ngắn hơn bản rõ, chúng tôi sẽ mở rộng nó bằng cách lặp lại, do đó khóa thực tế chúng tôi sử dụng là FOOBARFO. Bây giờ chúng ta tìm kiếm chữ cái đầu tiên của khóa, đó là Ftìm bảng chữ cái. Nó bắt đầu, có lẽ không ngạc nhiên, với F. Bây giờ chúng ta tìm thấy cột có chữ cái đầu tiên của bản rõ và chữ cái kết quả là H. Đối với chữ cái thứ hai, chúng ta có Ochữ cái chính và chữ cái đơn giản, dẫn đến C. Tiếp tục theo cách đó cuối cùng chúng tôi cũng có được HCRFGFQT.

Bài tập

Nhiệm vụ của bạn bây giờ là giải mã các tin nhắn, đưa ra một khóa. Tuy nhiên, vì chúng ta đã phát triển từ thế kỷ 16 và có máy tính, ít nhất chúng ta nên hỗ trợ một bảng chữ cái lớn hơn một chút:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Việc xây dựng quảng trường Vigenère vẫn rất giống nhau và mật mã vẫn hoạt động theo cùng một cách. Nó chỉ là một chút ... khó sử dụng để cung cấp đầy đủ ở đây.

Đầu vào

Đầu vào được đưa ra trên đầu vào tiêu chuẩn dưới dạng hai dòng văn bản riêng biệt, mỗi dòng kết thúc bằng một ngắt dòng. Dòng đầu tiên chứa khóa trong khi dòng thứ hai chứa bản mã.

Đầu ra

Một dòng duy nhất, chứa thông điệp được giải mã.

Điều kiện chiến thắng

Vì mã hóa đôi khi được coi là một vũ khí, mã nên ngắn gọn để tạo điều kiện cho việc buôn lậu dễ ​​dàng. Càng ngắn càng tốt, vì nó làm giảm khả năng khám phá.

Mẫu đầu vào 1

Key miQ2eEO

Sản lượng mẫu 1

Message

Mẫu đầu vào 2

ThisIsAKey CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu

Sản lượng mẫu 2

ThisWorksEquallyWellWithNumbers123894576

Một tuần đã trôi qua. Các giải pháp ngắn nhất hiện nay đã được chấp nhận. Đối với những người quan tâm, trong cuộc thi của chúng tôi, chúng tôi đã có các bài dự thi và thời lượng sau:

130 - Python
146 - Haskell
195 - C
197 - C
267 - VB.NET

Và các giải pháp riêng của chúng tôi không được xếp hạng với các giải pháp khác:

108 - Ruby
139 - PowerShell