>> ROB: Xin chào, tôi Rob, và chúng ta hãy giải mã chương trình Vigenere.
Điều đầu tiên nên chúng ta cần phải làm là làm cho chắc chắn người dùng nhập vào những gì chúng ta mong đợi
họ tại dòng lệnh.
Vì vậy, nếu không phải là argc 2 có nghĩa là một trong hai người dùng không nhập vào chuỗi chúng tôi
muốn được sử dụng như mã hóa của chúng tôi chuỗi, hoặc họ
vào quá nhiều thứ.
Và chúng tôi không biết phải làm gì với những thứ khác.
>> Vì vậy, chúng tôi nói với họ những gì họ nên đã nhập.
Và chúng tôi quay trở lại.
Bây giờ, giả định rằng argc là 2, chúng ta có thể tiếp tục với phần còn lại của chương trình.
>> Chúng tôi bí danh tên của argv [1]
vào các từ khóa khác nhau.
Vì vậy, chúng ta không cần phải sử dụng tên argv [1]
suốt phần còn lại của chương trình.
Và có lẽ chúng ta sẽ quên đi những gì điều đó có nghĩa và như vậy.
Từ khóa là một cái tên rất đẹp.
Và chúng tôi sẽ ngay lập tức lấy chiều dài của từ khóa của chúng tôi ngay tại đây.
>> OK, vì vậy bây giờ chúng tôi muốn kiểm tra xem từ khóa của chúng tôi là thực sự có giá trị.
Các từ khóa chúng tôi sử dụng để mã hóa chuỗi chỉ nên được chữ cái
ký tự.
Nếu người dùng nhập vào không theo thứ tự abc ký tự, chúng ta nên nói, từ khóa
chỉ phải chứa từ A đến Z và sau đó quay trở lại.
Vì vậy, điều này cho vòng lặp qua tất cả ký tự của từ khóa của chúng tôi, kiểm tra
rằng nếu một không phải là chữ cái sau đó chúng ta cần phải in cảnh báo đó.
>> Bây giờ, khi chúng tôi có được đến thời điểm này, chúng ta biết rằng chuỗi phải được chính xác.
Các từ khóa phải được chính xác.
Và bây giờ chúng ta cần phải nhận được thông báo từ người dùng rằng họ muốn chúng tôi
mã hóa với cụm từ đó.
Vì vậy, để nhận được tin nhắn đó, chúng tôi có một làm trong khi vòng lặp đó sẽ
liên tục nhận được một chuỗi từ người sử dụng cho đến khi họ nhập vào một chuỗi hợp lệ.
>> Tiếp tục, chúng ta thấy ở đây biến này, int nun_letters_seen.
Chúng ta sẽ thấy lý do tại sao chúng ta cần mà trong một giây.
Nhưng điều này cho vòng lặp sẽ lặp từ tôi bằng 0 tất cả các con đường lên đến tôi
bằng n, có nghĩa là chúng ta đang lặp lại hơn tất cả có thể
ký tự trong tin nhắn của chúng tôi.
Bởi vì chúng tôi muốn mã hóa tất cả các nhân vật trong tin nhắn của chúng tôi.
Vì vậy, chúng tôi nhận thấy làm gì nếu (isalphamessage [I], bởi vì chúng tôi không muốn để mã hóa
nhân vật mà không phải là chữ cái.
Nếu có biểu tượng, không gian, hoặc số, chúng tôi không
muốn mã hóa các.
>> Bây giờ, giả định rằng nó là chữ cái, trước tiên chúng ta muốn tìm ra những gì chúng tôi
thực sự muốn mã hóa các tin nhắn sử dụng.
Vì vậy, tôi có ý nghĩa gì bởi điều đó không?
>> Chúng ta hãy giả định rằng cụm từ khóa người dùng nhập vào là abc.
Đó là những gì chúng tôi đang sử dụng để mã hóa.
Bây giờ, ngây thơ, chúng tôi nghĩ rằng có nghĩa là chúng tôi muốn mã hóa các ký tự đầu tiên
thông điệp của chúng tôi bằng 0, vì một phương tiện quay nhân vật bằng 0.
>> Chúng tôi muốn mã hóa các ký tự thứ hai 1, nhân vật thứ ba 2,
nhân vật thứ tư của 0, thứ năm 1, thứ sáu 2, và như vậy.
Nhưng hãy nhớ rằng chúng ta muốn bỏ qua không gian và các ký hiệu và số.
Điều này có nghĩa rằng nếu người dùng đã nhập vào hello thế giới như thông điệp
rằng họ muốn mã hóa, sau đó chúng tôi muốn để mã hóa h bằng 0
tương ứng với một, e bằng 1, l 2, l bằng 0, o 1.
Chúng tôi muốn bỏ qua không gian, mã hóa w 2, o bằng 0, 1, 2, 0.
Vì vậy, nhận thấy, nếu chúng ta đã không bỏ qua không gian, sau đó chúng ta sẽ được mã hóa
w bằng 0 và kết thúc với chuỗi không chính xác.
>> OK, đây là những gì chúng ta cần biến num_letters_seen cho.
Nếu chúng ta chỉ cần đi để mã hóa sử dụng phương pháp này, mà không bỏ qua
biểu tượng, không gian, và con số, sau đó chúng tôi chỉ có thể sử dụng các biến tôi như những gì
chỉ số vào cụm từ khóa của chúng tôi với.
Chúng ta cần phải sử dụng num_letters_seen để giữ theo dõi những nơi thực tế trong
cụm từ quan trọng mà chúng tôi muốn chỉ số.
Vì vậy, ở đây, nếu từ khóa chúng tôi có, nếu num_letter_seen mod keyword_length, vì vậy
tại sao chúng ta cần phải mod theo chiều dài từ khoá?
>> Vâng, xin chào thế giới là một ví dụ tốt.
Nếu từ khóa là abc, thì chúng ta cần tiếp tục mã hóa bởi một sau đó b
sau đó c, sau đó quấn lại xung quanh, a, b, c, a, b, c.
Vì vậy, chúng ta cần phải mod bởi chiều dài từ khóa để quấn lại xung quanh.
>> Vì vậy, nếu điều này là một ký tự hoa, sau đó chúng tôi muốn mã hóa bởi
vị trí của lá thư trong bảng chữ cái, mà chúng tôi nhận được bằng cách chỉ
trừ ra khỏi vốn A. Và tương tự như vậy, đối với chữ thường, chúng tôi
có thể nhận được chìa khóa mà chúng tôi muốn bằng cách trừ ra chữ thường a.
Vì vậy, bất kể thư trong cụm từ khóa là một vốn
chữ thường, chúng ta sẽ mã hóa bởi cùng một số tiền.
>> Bây giờ chúng ta có chìa khóa của chúng tôi, chúng tôi thấy ở đây, rằng nếu tin tôi là một hoa
nhân vật, sau đó chúng tôi muốn để tính toán vị trí trong bảng chữ cái đó
nhân vật, thêm chính của chúng tôi với nó, quấn lại xung quanh để nếu chúng tôi đã đi qua một
z chúng ta trở lại a, b, c, và như vậy.
Sau đó, cuối cùng, thêm lại vốn A. Vì vậy, chúng tôi quay trở lại các [? Ascii?]
phạm vi của các nhân vật thay vì vị trí số trong bảng chữ cái
của những nhân vật này.
>> Và chúng tôi làm điều tương tự cho ký tự chữ thường.
Ngoại trừ chúng ta muốn trừ ra chữ thường một và thêm nó trở lại trong
kết thúc, chữ thường a.
Chú ý num_letter_seen mà chỉ là tăng lên nếu tin nhắn tôi đã
chữ cái.
Đây là cách chúng ta bỏ qua không gian, biểu tượng, và số trong cụm từ khóa của chúng tôi, kể từ khi
num_letter_seen là những gì chúng ta đang sử dụng chỉ số vào từ khóa của chúng tôi.
>> Cuối cùng, cuối cùng, bây giờ tin rằng i đã được mã hóa, chúng tôi
in ra thông điệp tôi.
Và đó là nó.
Tên tôi là Rob.
Và đây là Vigenere.
>> [MUSIC CHƠI]