Questions tagged «cryptography»

对于涉及密码学的挑战:加密或解密。

12
证明俄罗斯密码标准过于结构化
这一挑战的目标是找到一个不可能短期实现以下功能p,在您选择的langage。这是实现它的C代码(请参阅 此TIO链接,也将输出其输出)和包含该代码的Wikipedia页面。 unsigned char pi[] = { 252,238,221,17,207,110,49,22,251,196,250,218,35,197,4,77, 233,119,240,219,147,46,153,186,23,54,241,187,20,205,95,193, 249,24,101,90,226,92,239,33,129,28,60,66,139,1,142,79, 5,132,2,174,227,106,143,160,6,11,237,152,127,212,211,31, 235,52,44,81,234,200,72,171,242,42,104,162,253,58,206,204, 181,112,14,86,8,12,118,18,191,114,19,71,156,183,93,135, 21,161,150,41,16,123,154,199,243,145,120,111,157,158,178,177, 50,117,25,61,255,53,138,126,109,84,198,128,195,189,13,87, 223,245,36,169,62,168,67,201,215,121,214,246,124,34,185,3, 224,15,236,222,122,148,176,188,220,232,40,80,78,51,10,74, 167,151,96,115,30,0,98,68,26,184,56,130,100,159,38,65, 173,69,70,146,39,94,85,47,140,163,165,125,105,213,149,59, 7,88,179,64,134,172,29,247,48,55,107,228,136,217,231,137, 225,27,131,73,76,63,248,254,141,83,170,144,202,216,133,97, 32,113,103,164,45,43,9,91,203,155,37,208,190,229,108,82, 89,166,116,210,230,244,180,192,209,102,175,194,57,75,99,182, }; unsigned char p(unsigned char x) { return pi[x]; } 什么是 p p是两个俄罗斯密码标准的组成部分,即哈希函数Streebog和块密码Kuznyechik。在本文中(以及在ISO会议期间),这些算法的设计者声称他们pi通过选择随机的8位排列来生成数组。 “不可能”的实现 有8位上的排列。因此,对于给定的随机置换,不应期望实现该置换的程序需要少于1683位。256 !≈ 21684256!≈21684256! \approx 2^{1684} 但是,我们发现了多个异常小的实现(我们在此处列出),例如以下C程序: p(x){unsigned char*k="@`rFTDVbpPBvdtfR@\xacp?\xe2>4\xa6\xe9{z\xe3q5\xa7\xe8",l=0,b=17;while(--l&&x^1)x=2*x^x/128*285;return l%b?k[l%b]^k[b+l/b]^b:k[l/b]^188;} 它仅包含158个字符,因此适合1264位。单击此处查看它是否有效。 我们谈论“不可能”的简短实现是因为,如果排列是随机过程的输出(如其设计者所声称的那样),那么这种简短的程序将不存在(有关更多详细信息,请参见本页)。 参考实施 以前的C代码的可读性更高的版本是: …

30
打印Tabula Recta!
打印Tabula Recta! Tabula Recta(有时称为“ Vigenere表”)是由Johannes Trithemius创建的,并已用于多种密码中,包括Bellaso Vigenere密码和Trithemius密码的所有变体。看起来像这样: ABCDEFGHIJKLMNOPQRSTUVWXYZ BCDEFGHIJKLMNOPQRSTUVWXYZA CDEFGHIJKLMNOPQRSTUVWXYZAB DEFGHIJKLMNOPQRSTUVWXYZABC EFGHIJKLMNOPQRSTUVWXYZABCD FGHIJKLMNOPQRSTUVWXYZABCDE GHIJKLMNOPQRSTUVWXYZABCDEF HIJKLMNOPQRSTUVWXYZABCDEFG IJKLMNOPQRSTUVWXYZABCDEFGH JKLMNOPQRSTUVWXYZABCDEFGHI KLMNOPQRSTUVWXYZABCDEFGHIJ LMNOPQRSTUVWXYZABCDEFGHIJK MNOPQRSTUVWXYZABCDEFGHIJKL NOPQRSTUVWXYZABCDEFGHIJKLM OPQRSTUVWXYZABCDEFGHIJKLMN PQRSTUVWXYZABCDEFGHIJKLMNO QRSTUVWXYZABCDEFGHIJKLMNOP RSTUVWXYZABCDEFGHIJKLMNOPQ STUVWXYZABCDEFGHIJKLMNOPQR TUVWXYZABCDEFGHIJKLMNOPQRS UVWXYZABCDEFGHIJKLMNOPQRST VWXYZABCDEFGHIJKLMNOPQRSTU WXYZABCDEFGHIJKLMNOPQRSTUV XYZABCDEFGHIJKLMNOPQRSTUVW YZABCDEFGHIJKLMNOPQRSTUVWX ZABCDEFGHIJKLMNOPQRSTUVWXY 我经常需要它,但是在Internet上任何地方都找不到它可以复制和粘贴。因为方桌是那么的漫长,并采取该死的年龄打字,你的代码必须尽可能短。 规则/要求 每个提交应该是完整的程序或功能。如果它是一个函数,则只需将函数调用添加到程序底部即可使其可运行。其他任何内容(例如C中的标头)都必须包括在内。 如果可能,请提供指向可以测试您的程序的站点的链接。 您的程序不得向写入任何内容STDERR。 禁止使用标准漏洞。 您的程序在任何情况下都可以输出,但是必须将其打印出来(而不是数组或类似的东西)。 计分 程序根据字节评分,默认情况下为UTF-8或您选择的其他字符集。 最终,字节数最少的答案将获胜。 意见书 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 # Language Name, N bytes …

30
StringgnirtSStringgnirtSStringgnirtS
这对您来说是一个相对简单的挑战。 给定长度为N的字符串,向前输出该字符串,然后向后输出,然后向前,然后向后输出……等等。N次。例如,如果您输入的是 Hello! 您应该输出: Hello!!olleHHello!!olleHHello!!olleH 您也可以选择输出一个尾随换行符。 您的提交可以是完整程序,也可以是函数,并且您可以采用任何合理的格式进行输入和输出。例如,您可以从STDIN / STDOUT中获取IO,从函数中获取参数,并从文件中获取返回值,等等。您可以放心地假设输入字符串将不会为空,并且仅包含可打印的ASCII。您必须在一行上输出新字符串。因此,例如,如果最后一个示例的输出是 Hello! !olleH Hello! !olleH Hello! !olleH 这不是有效的解决方案! 这里是更多测试用例: Input: a Output: a Input: abcd Output: abcddcbaabcddcba Input: OK! Output: OK!!KOOK! Input: 4815162342 Output: 4815162342243261518448151623422432615184481516234224326151844815162342243261518448151623422432615184 Input: PPCG Output: PPCGGCPPPPCGGCPP Input: 42 Output: 4224 排行榜 由于这是一个代码高尔夫挑战,因此禁止了标准漏洞,以字节为单位的最短答案胜出!但是,这也是在任何特定语言中答案最短的竞赛。尽管Java答案不太可能会击败perl或某些打高尔夫球语言的答案,但拥有最短的Java答案仍然令人印象深刻。因此,您可以使用此页首横幅查看 所有语言中最短的答案,以及 每种语言的最短答案。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 # Language Name, N …
42 code-golf  string  code-golf  math  geometry  data-structures  repeated-transformation  code-golf  number  random  code-golf  math  rational-numbers  code-golf  ascii-art  animation  code-golf  ascii-art  number  code-golf  math  number  code-golf  data-structures  code-golf  string  parsing  code-golf  array-manipulation  random  permutations  code-golf  string  code-golf  parsing  code-golf  string  quine  code-golf  string  parsing  comment  code-golf  string  counting  natural-language  code-golf  string  decision-problem  code-golf  math  code-challenge  metagolf  test-battery  code-golf  string  code-golf  math  number  arithmetic  source-layout  code-golf  number  primes  decision-problem  code-golf  math  arithmetic  code-golf  date  code-golf  string  cryptography  code-golf  code-golf  chess  board-game  code-golf  geometry  grid  puzzle-solver  set-partitions  code-golf  number  natural-language  code-golf  ascii-art  code-golf  math  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  string  natural-language  code-golf  game  board-game  tic-tac-toe  code-golf  ascii-art  hexagonal-grid  code-golf  string  comment  code-golf  internet  code-golf  sorting  code-golf  kolmogorov-complexity  unicode  code-golf  tips  code-golf  string  natural-language  code-golf  string  kolmogorov-complexity  source-layout  hello-world  code-golf  string  kolmogorov-complexity  counting  natural-language  code-golf  random  quine  code-golf  string  math  bitwise  code-golf  permutations  code-golf  string  code-golf  arithmetic 

11
醉酒主教
在公共密钥密码术中,公共密钥指纹是用于标识较长公共密钥的一小段字节序列。 特别是在SSH中,它们可以用来验证服务器是否实际上是我希望与之通信的服务器,并且不受中间人攻击的攻击。 它们通常表示为十六进制数字字符串,因此将其与我期望的指纹进行比较可能相当无聊且乏味: 37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e 为了使操作更简单,OpenSSH引入了一种将指纹可视化为ASCII艺术的方法,如下所示: +-----------------+ | | | | | . | | . o | |o . o . S + | |.+ + = . B . | |o + + o B o E | | o . + . o | | .o | +-----------------+ …

30
这个数字是-2的整数次幂吗?
有很多聪明的方法来确定数字是否为2的幂。这不再是一个有趣的问题,因此让我们确定给定的整数是否为-2的整数次幂。例如: -2 => yes: (-2)¹ -1 => no 0 => no 1 => yes: (-2)⁰ 2 => no 3 => no 4 => yes: (-2)² 规则 您可以编写程序或函数,并使用接收输入和提供输出的任何标准方法。 您的输入是一个整数,如果该整数是-2的整数次幂,则输出必须是一个真实值,否则,则必须是一个虚假值。不允许其他输出(例如警告消息)。 通常的整数溢出规则适用:您的解决方案必须能够在语言的假设(或实际)版本中使用任意大整数,默认情况下,所有整数都是无界的,但是如果您的程序由于实现而在实践中失败不支持大整数,这不会使解决方案无效。 您可以使用任何编程语言,但是请注意,默认情况下,这些漏洞是禁止的。 获奖条件 这是一场代码高尔夫球比赛:字节数最少(在您选择的编码中)的答案是获胜者。

3
解决魔方
编写最短的程序,以在合理的时间范围内移动并解决Rubik的多维数据集(3 * 3 * 3)(例如,在您的计算机上最多5秒,而最多移动1000秒)。 输入的格式为: UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR (此特定输入表示已解决的多维数据集)。 前12个2个字符的字符串是UF,UR,... BL位置中的边(U =上,F =前,R =右,B =后,L =左,D =下),然后是下8个3个字符的字符串是UFR,URB,... DBR位置中的角。 输出应以这种格式给出一系列移动: D+ L2 U+ F+ D+ L+ D+ F+ U- F+ 其中D1或D +代表将D(下)面顺时针旋转90度,L2代表将L面旋转180度,U3或U-代表将U面逆时针旋转90度。 字母不区分大小写,空格是可选的。 …

23
加密哈希高尔夫
比赛结束了。 由于警察和强盗挑战的性质,当对相关强盗挑战的兴趣减少时,警察挑战变得容易得多。因此,尽管您仍然可以发布哈希函数,但是您的答案将不会被接受或成为排行榜的一部分。 这个挑战是最短实施的搜索哈希函数是抗碰撞,也就是说,它应该是不可能找到相同的哈希两个不同的消息。 作为警察,您尝试发明并实现一个哈希函数,以在代码大小和抗冲突性之间找到最佳折衷方案。使用太多字节,另一位警察将使您失望! 作为强盗,您尝试通过破坏警察的职能来挫败他们的尝试,证明它们不合适。这将迫使他们使用更多字节来增强算法! 警察挑战 任务 实现加密散列函数H:我- > 0您选择,其中我在2以下的集合中的所有非负整数的2 30和Ø低于2集的所有非负整数的128。 您可以将H实现为实际函数,该函数接受并返回单个整数,整数或整数数组的字符串表示形式,或者从STDIN读取并以10或16为基数打印到STDOUT的完整程序。 计分 H必须抵抗下面定义的强盗挑战。 如果强盗在发布后的168小时内将您提交的内容拒之门外,则认为该文件已被破解。 H的实现应尽可能短。最短的不打扰的提交将是警察挑战赛的获胜者。 附加规则 如果将H实现为函数,请提供一个包装程序,以从行为如上所述的程序中执行该函数。 请为您的程序或包装器至少提供三个测试向量(示例输入及其相应的输出)。 H可以是您的新颖设计(首选)或众所周知的算法,只要您自己实现即可。禁止使用任何类型的内置哈希函数,压缩函数,密码,PRNG等。 通常用于实现哈希函数(例如,基本转换)的任何内置方法都是公平的游戏。 程序或函数的输出必须是确定性的。 应该有一个免费的(如在啤酒中)编译器/解释器,可以在x86或x64平台上或从Web浏览器中运行。 您的程序或函数应该相当高效,并且必须在不到2秒的时间内对I 2 2 19以下的消息进行哈希处理。 对于边缘情况,在我的计算机(Intel Core i7-3770,16 GiB RAM)上花费的(墙)时间将是决定性的。 考虑到这一挑战的性质,无论是否更改输出,都禁止以任何方式更改答案的代码。 如果您提交的内容被破解(甚至没有被破解),则可以发布其他答案。 如果您的答案无效(例如,它不符合I / O规范),请删除它。 例 Python 2.7,22个字节 def H(M): return M%17 包装纸 print H(int(input())) 强盗挑战 任务 通过在强盗的线程中张贴以下内容来破解任何警察的提交:I中的两个消息M和N,使得H(M)= …

30
ROT-13转换标准输入
挑战:读取任意长度的输入并产生输入的ROT13。除AZ以外的所有字符都应原样复制到输出中,并在可能的情况下保留大小写。 任何可以读写标准流的语言都是公平的游戏。

3
不熟练的密码散列[关闭]
本着“ 不熟练C竞赛”的精神,我正在发起不熟练C竞赛。该竞赛的目的是直接实现一些代码,同时在其中隐藏一个邪恶的bug。 比赛 您是在美国间谍机构的IT部门工作的秘密俄罗斯痣。您的美国老板刚刚要求您实施密码哈希算法,以用于加密秘密消息。 您的老板希望您实现以下功能: f: String -> byte[16] 它将密码转换为16字节的数量,适合用作AES密钥。您的老板想要一个安全的功能,在这种情况下,这意味着不同的密码字符串应以压倒性的可能性生成不同的结果。例如,返回输入的md5哈希将是的简单实现f。 当然,您在俄罗斯间谍机构中的真正上司会希望您颠覆这一过程。您的任务是实现f使俄罗斯人可以解密使用所返回的密钥加密的所有秘密消息f。 为此,必须实现f以使其仅返回2 ^ 128个可能输出的一小部分。特别是,您f必须最多返回2 ^ 16个不同的结果,以便俄罗斯人可以轻松地用蛮力搜索想要解密的每条加密消息的正确密钥。 但是请记住,间谍活动会判处死刑。为了不被发现,您的函数f必须至少产生2 ^ 8个不同的结果,以便对的几个输出进行粗略的检查f就不可能发现重复的结果。 最重要的是,您引入的限制范围的代码f必须看起来是无意的,而不是故意的。 如果您曾经被拖入法庭,那么对于您是故意还是无意中引入了该错误,一定存在一些合理的疑问。 评判 我和我招募的其他两个人将对参赛作品进行评判(如果您想评判,请给我发电子邮件)。我将为获奖作品提供200点声望奖励。提交的内容必须在5月1日之前上传。 评审将考虑以下标准: 是否f坚持以规范,即,它不会产生2和2之间^ 8 ^ 16个可能的输出。不要以为这是硬性限制,但是如果您超出范围,我们会扣除分数。 该错误貌似是非故意错误的结果吗? f外观的输出是否随机? 您实施的时间越短f越好。 您实施的f越清晰,效果越好。 笔记 您可以使用任何语言来实现您的代码。您正试图将错误隐藏起来,因此不建议使用混淆的代码。 您可能想看看以前的一些欠人手C比赛获胜者,以了解提交优秀作品的原因。 输入字符串将是可打印的ascii(包括32至126)。如果需要,可以假定一个合理的最大长度。

30
聪明人的海市age楼
从前,我在阅读有关Quora的问题/答案 真的有没有计算机科学学位的程序员无法通过FizzBu​​zz测试 此代码是显而易见的答案 for i in range(1, 100): if i % 3 == 0 and i % 5 == 0: print "FizzBuzz" elif i % 3 == 0: print "Fizz" elif i % 5 == 0: print "Buzz" else: print i 当然,FizzBu​​zz已经被打死了,但这并不是这个问题的实质。您会在评论中看到有人提到该答案很不错,因为很容易添加额外条件,例如将“ Jazz”打印为4的倍数。(我不同意。扩展此方案需要O(2 ** n )代码行。) 您的挑战是编写由同行判断的最漂亮的FizzJazzBuzz版本。 选民需要考虑的一些事项: 干 除法/模运算的效率 …
29 popularity-contest  code-challenge  word  popularity-contest  string  grid  language-design  code-golf  source-layout  math  fastest-algorithm  assembly  code-golf  json  code-golf  arithmetic  array-manipulation  code-golf  ascii-art  code-golf  crossword  code-golf  string  restricted-complexity  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  decision-problem  balanced-string  syntax  code-golf  grid  puzzle-solver  hexagonal-grid  code-golf  math  number  sequence  code-golf  string  decision-problem  code-golf  cryptography  king-of-the-hill  code-challenge  fastest-code  code-golf  number  code-golf  code-golf  string  code-golf  cryptography  king-of-the-hill  java  code-golf  number-theory  base-conversion  code-golf  code-golf  array-manipulation  code-golf  array-manipulation  sorting  code-challenge  restricted-source  quine  code-golf  tips  python  king-of-the-hill  code-golf  source-layout  fractal  code-golf  tips  game  king-of-the-hill  path-finding  grid  code-golf  kolmogorov-complexity  natural-language  code-golf  tips  python  code-golf  number  arithmetic  sequence  array-manipulation  code-golf  number  combinatorics  random  integer-partitions  code-golf  string  code-golf  vim  comment  code-golf  combinatorics  counting  code-challenge  rosetta-stone  code-golf  combinatorics  sequence  subsequence  code-golf  code-challenge  restricted-source  primes  printable-ascii  popularity-contest  graphical-output  image-processing 

7
解密神经性青蛙
解密神经性青蛙 既然Puzzling.SE终于破解了我的两栖类密码,让我们编写一个程序或函数对其解密吧! (如果您想在迷惑之前先看一下它,请立即单击上面的链接。) 密码如何工作 神经症蛙ö ught向rel 一个 X在中号 UD浴场(“神经质青蛙”的简称),每一个字母被加密为一个或两个词: 非斜体字的长度表示字母。 neurotic => 8个字母=> H frogs => 5个字母=> E perpendicular => 13个字母= M 包含斜体的单词会修改以下单词,如果斜体单词的长度为奇数,则增加10;如果斜体单词的长度为偶数,则增加20。任何或所有单词都可以斜体显示。斜体字总是跟着非斜体字。 *o*ught to =>奇数,2 => 12 => L lo*u*nging calms =>偶数= 5 => 25 => Y 每个明文单词对应一个密文句子,每个明文句子对应一个密文段落。 输入格式 您的程序或功能应以“神经青蛙”的形式输入消息,格式为Markdown。输入将仅包含可打印的ASCII和换行符。 单词是与正则表达式匹配的字符行[A-Za-z0-9']。 数字和字母均计入一个单词的长度。QB64代表D。 注意:撇号不会计入单词的长度。Isn't代表D,不是E。 斜体字母包裹在一个星号(*letters*)中。 一个或多个连续字母可以斜体显示,直到整个单词(masseus*es*,*all*);单词中的多个非连续字母也可以用斜体(g*e*n*e*rates)表示。 斜体字不包含多个单词,不包含标点符号,也不包含撇号。 未配对的星号和多个相邻的星号将永远不会发生。 标点是以下任意字符:.,?!:;-()"。 句子中的单词由一个或多个标点符号和/或单个空格分隔。例如:*all* …

24
阿特巴什自我回文症
考虑一下Atbash转换: A|B|C|D|E|F|G|H|I|J|K|L|M Z|Y|X|W|V|U|T|S|R|Q|P|O|N 其中A⇔Z和L⇔O,例如,存在一些单词共有的有趣特性。当将某些字符串翻译成等同于atbash的字符串时,所说的翻译就是原始单词的反转。我称这些为Atbash自回文症。 例如,让我们翻译WIZARD: W→D 我→R Z→A A→Z R→我 D→W 结果是DRAZIW,它被向导反转了。因此,向导是一种atbash自我回文症。 目标给定一串可打印的ASCII字符,如果该字符串是atbash自回文,则输出或返回真实值,否则输出假值。(这是通过STDIN,最接近的等价函数,功能输入等完成的。如果您的语言不能执行任何这些操作,请考虑选择其他语言,您可以对输入进行硬编码。)您应该不区分大小写。如果输入是回文,并且不受atbash序列的影响,那么您仍然应该输出true,因为回文+本身就是回文。这是一个代码高尔夫球,因此以字节为单位的最短程序获胜。 测试用例 "Input" => true, false "WIZARD" => true "Wizard" => true // case doesn't matter "wIzArD" => true "W I Z A R D" => true "W IZ ARD" => false // the atbash of this is …

6
Gimli,让它更短吗?
我是Gimli的作者之一。我们已经在C中拥有2个tweet(280个字符)的版本,但是我想看看它有多小。 Gimli(论文,网站)是一种高速,高安全级别的加密排列设计,将在2017年加密硬件和嵌入式系统大会(CHES)(9月25日至28日)上展出。 任务 像往常一样:用您选择的语言来实现Gimli的较小可用的实现。 它应该能够将384位(或48个字节,或12个无符号int ...)作为输入并返回(如果使用指针,则可以在适当位置进行修改)应用于这384位的Gimli结果。 允许从十进制,十六进制,八进制或二进制的输入转换。 潜在的极端情况 整数编码被假定为低端(例如,您可能已经拥有的)。 您可以重命名Gimli为,G但是它仍然必须是函数调用。 谁赢? 这是代码高尔夫球,因此最短的答案以字节为单位!标准规则当然适用。 下面提供了参考实现。 注意 引起了一些关注: “嗨,帮派,请用其他语言免费实施我的程序,这样我就不必了”(致谢@jstnthms) 我的回答如下: 我可以轻松地用Java,C#,JS,Ocaml来完成它……这很有趣。目前,我们(Gimli团队)已在AVR,Cortex-M0,Cortex-M3 / M4,Neon,SSE,SSE展开,AVX,AVX2,VHDL和Python3上实现(并优化)。:) 关于金利 状态 Gimli将一轮回合应用于384位状态。状态表示为尺寸为3×4×32的平行六面体,或等效地表示为32位字的3×4矩阵。 每个回合是三个操作的序列: 非线性层,特别是应用于每列的96位SP盒; 在第二轮中,形成一个线性混合层; 在第四轮中,不断增加。 非线性层。 SP盒包含三个子操作:第一个单词和第二个单词的旋转;第二个单词的旋转。3输入非线性T函数;以及第一个和第三个单词的交换。 线性层。 线性层包含两个交换操作,即小交换和大交换。从第1轮开始,每4轮进行一次小交换。从第3轮开始,每4轮进行一次大掉期。 舍入常数。 Gimli有24发子弹,编号为24,23,...,1。当舍入数r为24、20、16、12、8、4时,我们将舍入常数(0x9e377900 XOR r)与第一个状态字进行异或。 C语言参考源 #include <stdint.h> uint32_t rotate(uint32_t x, int bits) { if (bits == 0) return x; …

22
PKCS#7填充验证
在密码术中,PKCS#7填充是一种填充方案,它添加了字节数N≥1,其中每个添加字节的值等于N。 例如,Hello, World!具有13个字节的,以十六进制表示如下: 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 如果我们选择将PKCS#7填充长度为16,则结果为: 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 03 03 03 如果我们选择填充长度为20,则结果为: 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 07 07 07 …

13
这是什么ROT?-解密ROT-n
以下是按频率顺序排列的英文字母的字母: e t a o i n s h r d l c u m w f g y p b v k j x q z 即,e是最常用的字母,z也是最不常用的字母。(来自Wikipedia的数据。) 您面临的挑战是获取一些ROT文本,例如: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz 这是通过ROT-21(42的一半)“加密”的文本“ thisisaverysecretmessageverysecureandsafe”。使用上面的频率表,您的程序应该能够确定每个字符旋转了多少以及原始文本。 (如果您不熟悉ROT-n,则实际上是将每个字符移动n。例如,在ROT-2中,a -> c, b -> d, ..., x -> z, y -> a, z -> b。) 你怎么问?您必须使用的(非常幼稚的)算法是: 对于每个“ …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.