`
zqjshiyingxiong
  • 浏览: 440232 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

《RUBY QUIZ - The Solitaire Cipher 》

阅读更多

本将开始一个漫长的翻译过程,初次翻译,翻译有误的地方,请指出……看的不明白的看原文。

 

本人将对RUBY QUIZ的一些测试进行翻译,并且对RUBY语言进行探讨和研究。

 

那么,现在就开始吧!朋友们!

 

The Solitaire Cipher

 

Cryptologist Bruce Schneier designed the hand cipher "Solitaire" for Neal Stephenson's book "Cryptonomicon". Created to be the first truly secure hand cipher, Solitaire requires only a deck of cards for the encryption and decryption of messages.

 

密码学家布鲁斯为尼尔史蒂芬森的著作“ Cryptonomicon ”设计手密码“纸牌游戏” 。创建的第一个真正安全的手密码,纸牌游戏,只需要一副纸牌为讯息加密和解密。

 

While it's true that Solitaire is easily completed by hand given ample time, using a computer is much quicker and easier. Because of that, Solitaire conversion routines are available in many languages, though I've not yet run across one in Ruby.

 

纸牌很容易完成的手给予充裕的时间,使用电脑是更快和更容易。由于这个原因,纸牌密码转换例程有许多语言可执行程序,但我已经没有遇到一个红宝石。

This week's quiz is to write a Ruby script that does the encryption and decryption of messages using the Solitaire cipher.

 

本周的比赛是写的Ruby脚本,利用纸牌密码写一个对信息加密和解密的程序。

 

Let's look at the steps of encrypting a message with Solitaire.

 

让我们来看看的用纸牌加密信息的步骤。

 

 

1. Discard any non A to Z characters, and uppercase all remaining letters. Split the message into five character groups, using Xs to pad the last group, if needed. If we begin with the message "Code in Ruby, live longer!", for example, we would now have:

 

1.丢弃任何非A到Z字,和所有其余的字母大写。分解信息分为五字母为一组,当不够时,用X来填充最后一组。如果我们开始用信息“Code in Ruby, live longer! ” ,例如,我们现在有:


          CODEI NRUBY LIVEL ONGER

 

2. Use Solitaire to generate a keystream letter for each letter in the message. This step is detailed below, but for the sake of example let's just say we get:

 

2.使用纸牌生成密钥信的每个字母的信息。这在一步下面详细列出,而是为了例子的原因让我们只想说我们得到:

 

DWJXH YRFDG TMSHP UURXJ

 

3. Convert the message from step 1 into numbers, A = 1, B = 2, etc:

3.转换第一个步骤的信息为号码, A = 1 ,B= 2 ,等等:

3 15 4 5 9 14 18 21 2 25 12 9 22 5 12 15 14 7 5 18

 

4. Convert the keystream letters from step 2 using the same method:

4.使用相同的方法转换第2步的密钥信:

4 23 10 24 8 25 18 6 4 7 20 13 19 8 16 21 21 18 24 10

 

5. 第五步:把第三步生成的数量加上第四步生成的数字,如果其大小大于26,那么就减去26,比如,加起来 6+10,那么就 16,如果 26+1,那么就等于27-26,即为1:

7 12 14 3 17 13 10 1 6 6 6 22 15 13 2 10 9 25 3 2

 

6. Convert the numbers from step 5 back to letters:

6.把步骤5的算出来的信息转换成字母:

GLNCQ MJAFF FVOMB JIYCB

 

 

That took a while to break down, but it's really a very simple process. Decrypting with Solitaire is even easier, so let's look at those steps now. We'll work backwards with our example now, decrypting "GLNCQ MJAFF FVOMB JIYCB".

 

而且在这方面花了一段时间来打破,但它上是一个非常简单的过程。用纸牌算法解密更加容易,所以让我们看看现在这些步骤。现在我们将继续用我们的实例,解密“ GLNCQ MJAFF FVOMB JIYCB ” 。

 

 

1. Use Solitaire to generate a keystream letter for each letter in the message to be decoded. Again, I detail this process below, but sender and receiver use the same key and will get the same letters:

1.使用纸牌算法生成密钥信的每个字母的信息进行解码。同样,我在下面详细说明这一过程,但发送和接收使用相同的钥匙,并会得到相同的信息:

DWJXH YRFDG TMSHP UURXJ

2. Convert the message to be decoded to numbers:

2.把信息转换,译码为数字。

7 12 14 3 17 13 10 1 6 6 6 22 15 13 2 10 9 25 3 2

 

3. Convert the keystream letters from step 1 to numbers:

3.转换第1步的字幕信息为数字:

4 23 10 24 8 25 18 6 4 7 20 13 19 8 16 21 21 18 24 10

 

4. Subtract the keystream numbers from step 3 from the message numbers from step 2. If the message number is less than or equal to the keystream number, add 26 to the message number before subtracting. For example, 22 - 1 = 21 as expected, but 1 - 22 = 5 (27 - 22):

4. 从信息中第二步的得出的数字减第三步的的出的数字,如果小于等于0,就用26减去得出的结果:

3 15 4 5 9 14 18 21 2 25 12 9 22 5 12 15 14 7 5 18

 

5.再次将数字串换为字幕:

 CODEI NRUBY LIVEL ONGER

 

 

Transforming messages is that simple. Finally, let's look at the missing piece of the puzzle, generating the keystream letters.

 

转换信息就是这么简单。最后,让我们来看看这个地方的困难所在,生成密钥字母。

 

 

1. Key the deck. This is the critical step in the actual operation of the cipher and the heart of it's security. There are many methods to go about this, such as shuffling a deck and then arranging the receiving deck in the same order or tracking a bridge column in the paper and using that to order the cards. Because we want to be able to test our answers though, we'll use an unkeyed deck, cards in order of value. That is, from top to bottom, we'll always start with the deck:

 

1.关 键的层次。在实际运作的密码和安全核心里这是关键的一步。有许多方法去了解这一点,如移动纸牌,然后安排接收纸牌在同一命令或跟踪的桥牌列在一副里,并使 用它排序卡片。因为我们希望能够检验我们的答案不过,我们会使用一个unkeyed卡片,有序的卡片顺序。也就是说,从上到下,我们将始终在用纸牌来做:

Ace of Clubs
...to...
King of Clubs
Ace of Diamonds
...to...
King of Diamonds
Ace of Hearts
...to...
King of Hearts
Ace of Spades
...to...
King of Spades
"A" Joker
"B" Joker

2. Move the A joker down one card. If the joker is at the bottom of the deck, move it to just below the first card. (Consider the deck to be circular.) The first time we do this, the deck will go from:
2. 移动A大王向下一卡片。如果大王在一副牌的底部,将它移到为第一张牌。 (考虑一副牌是循环。 )第一次,我们做到这,一副牌将往前:

1 2 3 ... 52 A B

To:

1 2 3 ... 52 B A

 

3. Move the B joker down two cards. If the joker is the bottom card, move it just below the second card. If the joker is the just above the bottom card, move it below the top card. (Again, consider the deck to be circular.) This changes our example deck to:

3.移动B大王向下一卡片。如果大王在一副牌的底部,将它移到为第二张牌。如果大王高于底部牌,将其移动低端牌。 (再次,考虑一副牌是循环。 )这改变我们举例为:

 

1 B 2 3 4 ... 52 A

 

4. Perform a triple cut around the two jokers. All cards above the top joker move to below the bottom joker and vice versa. The jokers and the cards between them do not move. This gives us:

4 。围绕两个jokers执行三次 。所有大王以上牌移动到下面大王的底部,反之亦然。大王和其他牌之间不会移动。这使我们:
B 2 3 4 ... 52 A 1

5. Perform a count cut using the value of the bottom card. Cut the bottom card's value in cards off the top of the deck and reinsert them just above the bottom card. This changes our deck to:

5 。执行数减少底部牌的值。切花底部卡的价值在起飞卡顶部的甲板和重新插入略高于底部卡。这种变化我们甲板到:

2 3 4 ... 52 A B 1 (the 1 tells us to move just the B)

 

6. Find the output letter. Convert the top card to it's value and count down that many cards from the top of the deck, with the top card itself being card number one. Look at the card immediately after your count and convert it to a letter. This is the next letter in the keystream. If the output card is a joker, no letter is generated this sequence. This step does not alter the deck. For our example, the output letter is:

6 。寻找输出信。转换顶端卡给它的价值和数量下降,许多卡顶部的甲板上,与顶端信用卡本身正在信用卡号码1 。看后您的信用卡数量和将其转换为信。这是下一个字母密钥。如果输出卡是一种滑稽,不信是产生这一序列。这一步骤不会改变原来的甲板上。对于我们的例子 中,输出信是:

D (the 2 tells us to count down to the 4, which is a D)

 

7. Return to step 2, if more letters are needed.

For the sake of testing, the first ten output letters for an unkeyed deck are:

7 。返回到步骤2中,如果有更多的信件是必要的。
为了试验,产量前十位的字母unkeyed甲板是:

D (4) W (49) J (10) Skip Joker (53) X (24) H (8)
Y (51) R (44) F (6) D (4) G (33)

 

That's all there is to Solitaire, finally. It's really longer to explain than it is to code up.

Solutions to this quiz should accept a message as a command line argument and encrypt or decrypt is as needed. It should be easy to tell which is needed by the pattern of the message, but you can use a switch if you prefer.

All the examples for this quiz assume an unkeyed deck, but your script can provide a way to key the deck, if desired. (A real script would require this, of course.)

Here's a couple of messages to test your work with. You'll know when you have them right:

这是所有有纸牌,最后。这真的不再来解释而不是代码了。

解决这一测验应该接受邮件作为命令行参数,并进行加密或解密是必要的。应该可以很容易地分辨出所需要的是模式的消息,但您可以使用一个开关,如果你喜欢。

所有的例子本测验承担unkeyed甲板,但您的脚本可以提供一种关键的甲板,如果想要的。 (一个真正的脚本将需要这一点,当然。 )

这里的一对夫妇的消息来测试您的工作。你知道当你有他们的权利:

CLEPK HHNIY CFPWH FDFEH

ABVAW LWZSY OORYK DUPVH

 


分享到:
评论

相关推荐

    Best of Ruby Quiz

    《Best of Ruby Quiz》是一本聚焦于Ruby编程语言的精选问答集锦,旨在帮助开发者深入理解和掌握Ruby的各种特性。这本书的描述简洁明了,"Best of Ruby Quiz"直接点出了其核心内容——一系列关于Ruby的精彩挑战和问题...

    Ajax-Online-Quiz-Test-Management-System.zip

    Ajax-Online-Quiz-Test-Management-System.zip,这是一个用于测验测试的教育门户网站。这里有三种类型的用户-管理员、教师和学生。它是由原始的php、jquery、javascript、ajax、html、css和mysql数据库完成的,ajax...

    quiz-app-源码.rar

    描述简单地提到了“quiz-app-源码”,意味着这个压缩包中包含了 Quiz App 的所有源代码。.rar 文件格式是一种常见的压缩方式,用于打包和存储多个文件或目录。用户解压后,可以查看和编辑源代码,了解应用的工作原理...

    iOS实例开发源码——heinekev-Quiz-Game-c0ba104.zip

    《iOS实例开发:heinekev-Quiz-Game解析》 在iOS开发中,实践是提升技能的关键。本次我们关注的项目是"Heinekev-Quiz-Game",这是一个基于c0ba104版本的iOS游戏源码,旨在帮助开发者深入理解iOS应用的构建过程,...

    Multiple Choice Quiz - Template.xls

    Multiple Choice Quiz - Template.xls

    programmer-quiz-master.rar

    "programmer-quiz-master.rar"这个压缩包文件,正如其名,提供了一个专门为程序员设计的趣味挑战平台的源代码。通过研究这份源码,我们可以深入理解软件开发中的诸多关键知识点,包括但不限于软件架构、算法设计、...

    JS-Quiz-Game-源码.rar

    《JS-Quiz-Game-源码》是一款基于JavaScript编写的互动问答游戏,它提供了一种有趣的方式学习和测试用户对JavaScript编程语言的理解。这个压缩包包含了一个完整的JavaScript问答游戏项目,我们可以从中学到许多关于...

    Universe-Quiz-main-源码.rar

    "Universe-Quiz-main-源码.rar" 是一个包含源代码的压缩文件,通常这样的文件是用于软件开发的,尤其是与编程相关的项目。从标题来看,我们可以推断这是一份关于“Universe Quiz”的主要源代码,它可能是一个基于...

    每天分享几个python项目 —— simple-quiz-system-project-in-python

    本项目"simple-quiz-system-project-in-python"旨在帮助初学者和有一定基础的开发者实践Python后端开发,通过构建一个简单的问答系统来巩固编程知识。 项目的核心目标是创建一个交互式的问答程序,用户可以参与答题...

    Angular-angular-quiz-app.zip

    Angular-angular-quiz-app.zip,使用Spotify API的Angular 2 音乐测验。Angular音乐测验,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面...

    Quiz-Java-CODES.rar_quiz

    这个"Quiz-Java-CODES.rar_quiz"压缩包文件显然包含了一些Java编程用于创建测验或问答应用的示例代码。让我们深入探讨一下这个主题,了解Java在构建问答系统时可能涉及的关键知识点。 1. **Java基础**:首先,理解...

    skill-sample-nodejs-quiz-game, 演示如何构建测试游戏技巧的Alexa技能示例.zip

    本项目"skill-sample-nodejs-quiz-game"就是一个很好的实例,展示了如何利用Node.js构建一个测试用户游戏技巧的Alexa Skill。 首先,我们需要了解的是,这个开源项目的核心是使用Node.js,这是一种基于Chrome V8...

    Practical-Quiz-1.SecondsCalculatorSSD3.rar_Practical Quiz 1

    "Practical-Quiz-1.SecondsCalculatorSSD3.rar" 这个标题揭示了这是一个关于实践测试的文件,具体来说是“秒计算器”(SecondsCalculator)的主题,属于SSD3(可能指的是某个课程或者学习阶段,如Solid State Disk 3...

    quiz-game-master的副本.zip

    在这个名为"quiz-game-master的副本.zip"的项目中,我们可以看到一个基于Vue实现的在线答题游戏平台。该项目包含多个关键功能,如排行榜、用户头像、虚拟奖金、答题次数追踪、答题倒计时以及练习模式,这些都是构建...

    iOS游戏应用源代码——heinekev-Quiz-Game-c0ba104.zip

    这个压缩包文件“heinekev-Quiz-Game-c0ba104.zip”显然包含了一个iOS游戏应用的源代码,名为"Quiz Game"。这个项目由开发者heinekev创建,版本号为c0ba104,可能是其Git仓库中的一个特定提交。这个标签“ios”...

    Practical-Quiz-6.rar_Help!

    标题中的"Practical-Quiz-6.rar_Help!"暗示我们这是一个关于实践测试或者练习题的压缩文件,可能是某个在线课程、教程或学习资源的一部分。"rar"是文件压缩格式,通常用于打包多个文件或文件夹以便于存储和传输。...

    《Best of Ruby Quiz》

    读者大多可以想出一种办法来解决这些问题,往往还能 通过思考和重构找到第二种优雅的设计,但这本书却给你列出了第三种、第四种真正精巧的解决方案——充分利用Ruby技巧才能得出的解决方案。

Global site tag (gtag.js) - Google Analytics