1 00:00:00,000 --> 00:00:11,980 2 00:00:11,980 --> 00:00:16,980 >> ROB: Oi, eu sou Rob, e vamos decifrar o programa Vigenere. 3 00:00:16,980 --> 00:00:21,180 Então a primeira coisa que precisamos fazer é Certifique-se o usuário digitou o que esperávamos 4 00:00:21,180 --> 00:00:23,240 los para a linha de comando. 5 00:00:23,240 --> 00:00:28,720 Então, se argc não é 2, que significa tanto o usuário não entrou na cadeia de nós 6 00:00:28,720 --> 00:00:31,780 quer usar como a nossa criptografia corda, ou eles 7 00:00:31,780 --> 00:00:32,890 entrou muitas coisas. 8 00:00:32,890 --> 00:00:35,130 E nós não sabemos o que fazer com as outras coisas. 9 00:00:35,130 --> 00:00:37,960 >> Por isso, dizer-lhes o que eles deveria ter entrado. 10 00:00:37,960 --> 00:00:39,300 E voltamos. 11 00:00:39,300 --> 00:00:44,570 Agora, admitindo que argc era 2, podemos continuar com o resto do programa. 12 00:00:44,570 --> 00:00:47,890 >> Nós alias o nome de argv [1] 13 00:00:47,890 --> 00:00:49,750 para a palavra-chave variável. 14 00:00:49,750 --> 00:00:51,860 De modo que não temos a usar o nome argv [1] 15 00:00:51,860 --> 00:00:53,050 durante todo o resto do programa. 16 00:00:53,050 --> 00:00:55,570 E talvez nós vamos esquecer o que que significa e assim por diante. 17 00:00:55,570 --> 00:00:57,830 Palavra-chave é um nome muito mais agradável. 18 00:00:57,830 --> 00:01:01,982 E nós vamos imediatamente agarrar o comprimento da nossa palavra-chave aqui. 19 00:01:01,982 --> 00:01:07,460 >> OK, então agora queremos verificar que nossa palavra-chave é realmente válido. 20 00:01:07,460 --> 00:01:11,250 A palavra-chave que usamos para criptografar cordas deve apenas ser alfabética 21 00:01:11,250 --> 00:01:12,400 caracteres. 22 00:01:12,400 --> 00:01:16,830 Se o usuário digitou não-alfabética caracteres, devemos dizer, palavra-chave 23 00:01:16,830 --> 00:01:20,170 deve conter apenas um meio Z e depois voltar. 24 00:01:20,170 --> 00:01:24,370 Portanto, este laço for sobre tudo personagens da nossa palavra-chave, verificando 25 00:01:24,370 --> 00:01:31,870 que, se a pessoa não está em ordem alfabética, em seguida, precisamos imprimir esse aviso. 26 00:01:31,870 --> 00:01:36,285 >> Agora, uma vez que chegar a este ponto, sabemos que a cadeia deve ser correta. 27 00:01:36,285 --> 00:01:38,230 A palavra-chave deve ser correta. 28 00:01:38,230 --> 00:01:40,880 E agora temos de passar a mensagem de o usuário que nós queremos 29 00:01:40,880 --> 00:01:43,910 criptografar com essa frase-chave. 30 00:01:43,910 --> 00:01:46,780 Assim, para obter essa mensagem, temos um fazer enquanto loop que vai 31 00:01:46,780 --> 00:01:52,650 continuamente obter uma string do usuário até que eles entram em uma seqüência válida. 32 00:01:52,650 --> 00:01:58,690 >> Continuando, vemos aqui a esta variável, int nun_letters_seen. 33 00:01:58,690 --> 00:02:01,300 Vamos ver por isso que precisamos que em um segundo. 34 00:02:01,300 --> 00:02:07,320 Mas este ciclo for vai fazer uma iteração de i é igual a 0 todo o caminho até i 35 00:02:07,320 --> 00:02:10,940 é igual a n, o que significa que estamos interagindo sobre todo o possível 36 00:02:10,940 --> 00:02:13,020 personagens da nossa mensagem. 37 00:02:13,020 --> 00:02:17,370 Porque queremos criptografar todos os personagens de nossa mensagem. 38 00:02:17,370 --> 00:02:22,970 Então, observe o que fazemos se (isalphamessage [I], porque nós não queremos para criptografar 39 00:02:22,970 --> 00:02:25,660 caracteres que não são alfabética. 40 00:02:25,660 --> 00:02:28,810 Se há símbolos, espaços, ou números, nós não 41 00:02:28,810 --> 00:02:30,730 deseja criptografar os. 42 00:02:30,730 --> 00:02:37,220 >> Agora, supondo que ele está em ordem alfabética, primeiro quero descobrir o que 43 00:02:37,220 --> 00:02:40,890 realmente deseja criptografar a mensagem usando. 44 00:02:40,890 --> 00:02:42,710 Então, o que quero dizer com isso? 45 00:02:42,710 --> 00:02:46,740 >> Vamos supor que a frase-chave o usuário digitou foi abc. 46 00:02:46,740 --> 00:02:49,070 Isso é o que estamos usando para criptografar. 47 00:02:49,070 --> 00:02:54,850 Agora, ingenuamente, pensamos que significa que queremos criptografar o primeiro caractere 48 00:02:54,850 --> 00:02:59,740 da mensagem por 0, uma vez que um meio girando o personagem por 0. 49 00:02:59,740 --> 00:03:04,395 >> Queremos criptografar o segundo personagem por 1, terceiro personagem por 2, 50 00:03:04,395 --> 00:03:09,170 o quarto caractere por 0, o quinto por 1, o sexto por 2, e assim por diante. 51 00:03:09,170 --> 00:03:14,440 Mas lembre-se que queremos pular espaços e símbolos e números. 52 00:03:14,440 --> 00:03:21,520 Isto significa que, se o utilizador tinha entrado Olá mundo como a mensagem 53 00:03:21,520 --> 00:03:26,590 que deseja criptografar e, em seguida queremos criptografar o h por 0 54 00:03:26,590 --> 00:03:32,680 correspondente à uma, o e por 1, o l por 2, o l por 0, o o em 1. 55 00:03:32,680 --> 00:03:41,050 Queremos pular o espaço, cifrado o w por 2, oo por 0, 1, 2, 0. 56 00:03:41,050 --> 00:03:45,250 Então, observe, se não tivéssemos pulado o espaço, então teríamos criptografado 57 00:03:45,250 --> 00:03:51,240 a w por 0 e acabou com a string incorreta. 58 00:03:51,240 --> 00:03:57,470 >> OK, isso é o que precisamos a variável num_letters_seen para. 59 00:03:57,470 --> 00:04:04,450 Se nós estávamos indo para criptografar usando este método, que não ignora 60 00:04:04,450 --> 00:04:09,860 símbolos, espaços e números, então nós poderia usar apenas a variável i como o que 61 00:04:09,860 --> 00:04:12,540 para o índice em nossa frase-chave com. 62 00:04:12,540 --> 00:04:17,620 Precisamos usar num_letters_seen para manter pista do lugar real no 63 00:04:17,620 --> 00:04:21,146 frase-chave que queremos índice. 64 00:04:21,146 --> 00:04:32,240 Então, aqui, se a palavra-chave que temos, se num_letter_seen keyword_length mod, então 65 00:04:32,240 --> 00:04:34,570 por que precisamos de mod por comprimento de palavra-chave? 66 00:04:34,570 --> 00:04:36,630 >> Bem, Olá mundo era um bom exemplo. 67 00:04:36,630 --> 00:04:42,310 Se a palavra-chave é abc, então precisamos criptografar continuamente por um então b 68 00:04:42,310 --> 00:04:45,740 em seguida, c, em seguida, enrole em torno de volta, a, b, c, a, b, c. 69 00:04:45,740 --> 00:04:50,110 Por isso, precisamos de mod pelo comprimento palavra-chave a fim de envolvê-volta. 70 00:04:50,110 --> 00:04:57,280 >> Então, se isso é uma letra maiúscula, então queremos criptografar pelo 71 00:04:57,280 --> 00:05:01,450 posição de que letra do alfabeto, que temos apenas 72 00:05:01,450 --> 00:05:06,730 subtraindo a capital de A. E da mesma forma, para letras minúsculas, nós 73 00:05:06,730 --> 00:05:13,000 pode obter a chave que queremos por subtraindo a minúscula a. 74 00:05:13,000 --> 00:05:16,910 Assim, independentemente de a carta na frase-chave era uma capital ou 75 00:05:16,910 --> 00:05:21,640 letra minúscula, vamos criptografar pelo mesmo montante. 76 00:05:21,640 --> 00:05:28,680 >> Agora que temos a nossa chave, podemos ver aqui, que se a mensagem é um i maiúsculo 77 00:05:28,680 --> 00:05:32,660 personagem, então queremos calcular a posição em que o alfabeto de 78 00:05:32,660 --> 00:05:39,460 personagem, acrescentar a nossa chave para isso, enrole para trás em torno de modo que, se passou por um 79 00:05:39,460 --> 00:05:43,170 z vamos voltar para a, b, c, e assim por diante. 80 00:05:43,170 --> 00:05:49,070 Então, finalmente, adicionar novamente sobre o capital A. Então, mudamos de volta para o [? Ascii?] 81 00:05:49,070 --> 00:05:52,010 variedade desses caracteres em vez do posição numérica no alfabeto 82 00:05:52,010 --> 00:05:53,540 desses personagens. 83 00:05:53,540 --> 00:05:56,610 >> E nós fazemos a mesma coisa para caracteres minúsculos. 84 00:05:56,610 --> 00:06:00,070 Exceto queremos subtrair minúsculas um e adicioná-lo de volta em no 85 00:06:00,070 --> 00:06:02,900 final, em letras minúsculas a. 86 00:06:02,900 --> 00:06:08,120 Observe que só é num_letter_seen incrementado se a mensagem que eu estava 87 00:06:08,120 --> 00:06:09,640 alfabética. 88 00:06:09,640 --> 00:06:15,790 É assim que pular espaços, símbolos e números em nossa frase-chave, uma vez que 89 00:06:15,790 --> 00:06:20,520 num_letter_seen é o que estamos usando para o índice em nossa palavra-chave. 90 00:06:20,520 --> 00:06:24,540 >> Finalmente, no final, já que a mensagem i foi criptografado, nós 91 00:06:24,540 --> 00:06:26,280 imprimir mensagem i. 92 00:06:26,280 --> 00:06:27,890 E é isso. 93 00:06:27,890 --> 00:06:28,670 Meu nome é Rob. 94 00:06:28,670 --> 00:06:31,020 E esta é Vigenere. 95 00:06:31,020 --> 00:06:32,850 >> [Música tocando] 96 00:06:32,850 --> 00:06:36,651