Questions tagged «cryptography»

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

4
移位XORyption
编写一个程序或函数(或一组程序/函数),以给定以下规范来加密和解密数据: 加密 通过将每个字节彼此异或来对输入进行XOR哈希计算。 通过此哈希对输入的每个字节进行XOR。 将结果左移四位。 用XOR哈希的前四位填充左侧。 在XOR哈希的最后四位填充右侧。 例 给定的输入:"G0lf"(0x47306C66) 计算XOR哈希: 0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D 通过哈希对每个字节进行XOR: 0x3A4D111B 预期结果(后移和垫): ()"s¤Ñ\x11½"0x73A4D111BD 规则 只要输入/输出是实际的字节,您的程序/函数就可以在您选择的高尔夫语言(字符串,字节数组等)中有意义的任何类型的输入/输出。例如,您可能不输出十六进制字符串。 加密和解密可以分为单独的程序(分数将是它们的总大小)或单个程序。单个方法可以采用参数进行加密还是解密。 预计加密输入至少为1个字节。 解密输入至少应为2个字节。 不可打印字节不需要在输出中转义。

8
实施Rijndael的S-box
Rijndael的S-box是AES加密和解密中经常使用的操作。它通常实现为256字节查找表。这很快,但是这意味着您需要在代码中枚举256字节的查找表。我敢打赌,鉴于基本的数学结构,这种人群中的某人可以用更少的代码来完成这项工作。 用您喜欢的语言编写一个实现Rijndael的S-box的函数。最短的代码获胜。

3
培根密码:隐写术简介
这只小猪推向市场,这只小猪写了一些代码... 啊,等等,我们不是在谈论那培根,而是在谈论弗朗西斯·培根爵士!具体地,密码培根在1500年代末期设计,作为一种将消息隐藏在另一条消息中的方法,即隐写术。 密码通过隐藏文本表示中的消息而不是其内容来起作用。首先,您的邮件字母被编码为二进制(从0到25),如下所示: 注意:请在代码中使用以下编码,不要担心输入中的数字,空格或其他符号,尽管我可能会为那些在编码中包含这些字符的人带来一些好处。如果确实包含其他符号,则字母在编码中仍必须占据0-25的空格。 Letter Encoding A AAAAA B AAAAB C AAABA D AAABB E AABAA F AABAB G AABBA H AABBB I ABAAA J ABAAB K ABABA L ABABB M ABBAA N ABBAB O ABBBA P ABBBB Q BAAAA R BAAAB S BAABA T BAABB U BABAA V BABAB …

9
凯撒的转变
描述 凯撒移位(Caesar Shift)是一种非常简单的单字母密码,其中每个字母都被替换为字母中的一个字母。例: Hello world! -> IFMMP XPSME! (IBSLR, EGUFV!是实际挑战的输出,这是移动1的示例。) 如您所见,空格和标点符号保持不协调。但是,为防止猜测消息,所有字母均大写。通过将字母向后移,可以解密该消息,很方便,但是真的很容易被不知道该消息含义的其他人解密。 因此,我们将通过使用一种高级形式的密码来帮助Caesar:Self-shifting Caesar Shift! 挑战 您的任务是编写一个程序或函数,给定要加密的字符串,然后输出与输入相对应的加密字符串。先进的Caesar Shift的工作方式如下: 1. Compute letter differences of all adjacent letters: 1.1. Letter difference is computed like this: Position of 2nd letter in the alphabet -Position of 1st letter in the alphabet ======================================= Letter difference 1.2. …

3
Brainfuck中的按位运算符
您的任务是为以下每个二进制运算符创建一个Brainfuck程序。每个程序应从输入中获取一个或两个8位数字(A和B)并计算指定的运算: A XOR B A AND B A OR B A Shifted Left by 1 (circular shift) NOT A 您不必全部实施5。得分的计算方式为: #totalCharacters + {4000 * #problemsNotCompleted} 因此,有效分数是从零(最佳)到20,000(未完成)。 我不在乎您将结果存储在哪里,也不管您是否保留输入。假设8位单元以及仅在右侧需要的空单元数。 您可能会认为数字已经在最适合您的任何内存位置中,因此您无需担心IO操作。
13 code-golf  binary  brainfuck  code-golf  code-golf  ascii-art  random  code-golf  code-golf  code-challenge  sorting  code-golf  code-challenge  java  code-golf  statistics  code-golf  code-challenge  fastest-code  code-golf  math  code-golf  math  kolmogorov-complexity  code-golf  code-golf  array-manipulation  combinatorics  code-golf  kolmogorov-complexity  popularity-contest  underhanded  code-golf  math  floating-point  code-golf  interpreter  code-golf  music  code-golf  code-golf  cryptography  code-challenge  scrabble  code-golf  code-challenge  popularity-contest  quine  code-golf  quine  cryptography  code-golf  kolmogorov-complexity  code-golf  printable-ascii  code-golf  chess  code-golf  math  number-theory  code-challenge  c  code-golf  random  popularity-contest  hello-world  code-shuffleboard  code-golf  compression  grammars  code-golf  tips  code-golf  sequence  code-golf  string  code-challenge  sorting  permutations  code-golf  string  code-challenge  optimization  code-golf  interpreter  code-challenge  string  code-golf  math  number  fibonacci  string  compression  c#  code-golf  chemistry  popularity-contest  math  c  c++  java  code-golf  math  function  code-golf  complex-numbers  code-golf  geometry 

12
实施一次性垫
背景 甲一次性垫是一种形式的加密已经被证明是不可能的,如果使用得当开裂。 通过采用纯文本(仅包含字母AZ)并生成相同长度的随机字符串(也仅包含字母)来执行加密。该字符串充当密钥。然后,将明文中的每个字符与密钥中的相应字符配对。密文计算如下:对于每对,两个字符都转换为数字(A = 0,B = 1,... Z = 25)。这两个数字以26为模加。该数字被转换回一个字符。 解密正好相反。将密文和密钥中的字符配对并转换为数字。然后从密文模26中减去密钥,并将结果转换回字符AZ。 挑战 您面临的挑战是编写尽可能短的程序,该程序既可以加密也可以解密一次性键盘。 在输入的第一行(到STDIN)上,将出现单词“ ENCRYPT”或单词“ DECRYPT”。 如果单词是加密的,那么下一行将是纯文本。您的程序应输出两行(到STDOUT),第一行是密钥,第二行是密文。 如果单词被解密,您的程序将再获得两行输入。第一行是密钥,第二行是密文。您的程序应输出一行,这将是已解密的纯文本。 明文,密文和密钥应始终由大写字母AZ组成。它们将始终为一行,并且不包含空格。 密钥应始终是随机的。在运行之间不应重复大部分操作,并且在文本中不应找到任何模式。 两个简单的例子: ENCRYPT HAPPYBIRTHDAY >ABKJAQLRJESMG >HBZYYRTICLVME DECRYPT ABKJAQLRJESMG HBZYYRTICLVME >HAPPYBIRTHDAY 该>代表线路输出,所以你不必打印符号作为输出。

2
解释基普尔!
介绍 Kipple是Rune Berg于2003年3月发明的基于堆栈的深奥编程语言。 Kipple有27个堆栈,4个运算符和一个控制结构。 堆栈 堆栈被命名为a- z并包含32位带符号整数。还有一个特殊的堆栈,@使输出数字更加方便。当将数字压入时@,实际上将压入该数字的ASCII值。(例如,如果您将12推到@,它将推49,然后推50。@) i在执行程序之前,将输入压入输入堆栈。解释器将i在执行之前要求存储值。执行完成后,输出堆栈上的所有内容o都会弹出以ASCII字符形式输出。由于这是Kipple唯一的IO机制,因此无法与Kipple程序进行交互。 经营者 操作数可以是堆栈标识符或带符号的32位整数。 推送:>或< 语法:Operand>StackIndentifier或StackIndentifier<Operand Push运算符将操作数向左移并将其推入指定的堆栈。例如,12>a将值12推入stack a。a>b将从堆栈中弹出最高值a并将其推入堆栈b。弹出空堆栈总是返回0 a<b相当于b>a。a<b>c从弹出最高值,b并同时推入c和a。 加: + 句法: StackIndentifier+Operand Add运算符将堆栈上最顶层项目和操作数之和压入堆栈。如果操作数是堆栈,则从中弹出值。例如,如果堆栈的最高值为a1,a+2则将3压入堆栈。如果a为空,a+2则将2推入。如果堆叠的最值a和b是1和2,然后a+b将从栈中弹出的值2 b和3推入堆栈a。 减去: - 句法: StackIndentifier-Operand 减法运算符的工作方式与加法运算符完全相同,只是它减去而不是加法。 明确: ? 句法: StackIndentifier? 如果最上面的项目为0,则Clear运算符将清空堆栈。 解释器将忽略操作符旁边不存在的所有内容,因此以下程序将起作用:a+2 this will be ignored c<i。但是,添加注释的正确方法是使用#字符。#执行前,a 和行尾字符之间的所有内容都将被删除。ASCII字符#10在Kipple中定义为行尾。 操作数可以由两个运算符共享,例如a>b c>b c?可以写为a>b<c?。 该程序1>a<2 a+a将导致a包含值[1 4](从下到上),而不是[1 3]。对于-操作员也是如此。 控制结构 Kipple中只有一种控制结构:循环。 句法: (StackIndentifier code …
12 code-golf  interpreter  code-golf  string  code-golf  math  string  code-golf  ascii-art  path-finding  code-golf  string  ascii-art  code-golf  interpreter  binary  logic-gates  logic  code-golf  ascii-art  code-golf  graph-theory  code-golf  string  code-golf  number  sorting  code-golf  number-theory  random  cryptography  polynomials  code-golf  number  code-golf  math  number  sequence  code-golf  quine  code-generation  code-golf  arithmetic  set-theory  code-golf  sequence  code-golf  code-golf  string  math  fastest-code  optimization  code-golf  code-golf  internet  stack-exchange-api  code-golf  array-manipulation  code-golf  string  internet  string  code-challenge  internet  test-battery  code-golf  math  pi  code-golf  arithmetic  primes  code-golf  array-manipulation  code-golf  string  code-golf  string  palindrome  code-golf  sequence  number-theory  fastest-algorithm  code-golf  math  number  base-conversion  code-golf  number-theory  sorting  subsequence  search  code-golf  permutations  code-challenge  popularity-contest  code-generation 

2
隐身踢球者//
隐身踢 加密文本的一种常见但不安全的方法是置换字母。换句话说,字母表中的每个字母在文本中始终被其他字母替换。为确保加密是可逆的,同一字母不会替换任何两个字母。您的任务是解密几行编码的文本,假设每一行使用不同的替换集,并且解密的文本中的所有单词均来自已知单词的词典。 输入值 输入由小写字母组成,按字母顺序。这些单词构成了可能出现在解密文本中的单词词典。在字典之后是几行输入。每行如上所述进行加密。 词典中的单词数不超过1,000。没有一个单词超过16个字母。加密的行仅包含小写字母和空格,并且长度不超过80个字符。 输出量 解密每一行并将其打印到标准输出。如果有多种解决方案,那么任何一种都可以。如果没有解决方案,请用星号替换字母表中的每个字母。 样本输入 and dick jane puff spot yertle bjvg xsb hxsn xsb qymm xsb rqat xsb pnetfn xxxx yyy zzzz www yyyy aaa bbbb ccc dddddd 样本输出 dick and jane and puff and spot and yertle **** *** **** *** **** *** **** *** …

20
加密哈希高尔夫(强盗)
比赛结束了。 警察挑战中没有剩余的可靠答案。 加密哈希高尔夫的同伴线程 提醒一下,这是针对主要挑战的强盗规则: 任务 通过在强盗的线程中张贴以下内容来破解任何警察的提交:I中的两个消息M和N,使得 H(M)= H(N)和M≠N。 计分 破解每个警察提交的内容可以使您获得1分。得分最高的强盗获胜。 如果是平局,则破解最长提交的并列强盗获胜。 附加规则 每次提交的警察只能被破解一次。 如果警察提交依赖于实现定义的行为或未定义的行为,则只需要找到在计算机上有效(可验证)的破解即可。 每个破解都属于强盗线程中的一个单独答案。 发布无效的破解尝试会禁止您破解特定的提交文件30分钟。 您可能无法破解自己的提交。 例 Python 2.7,user8675309的22个字节 1 和 18 排行榜 电子商务:3个裂缝,393个字节 MartinBüttner:3个裂缝,299字节 jimmy23013:3个裂缝,161个字节 Sp3000:3个裂缝,44个字节 tucuxi:2个裂缝,239个字节 六。:2个裂缝,87字节 feersum:1个裂纹,216个字节 mathmandan:1个破解,139个字节 吱吱作响的ossifrage:1裂纹,134字节

1
通过整数操作实现IEEE 754 64位二进制浮点数
(我暂时将问题标记为“ C”,但是如果您知道另一种支持联合的语言,则也可以使用它。) 您的任务是+ - * /为以下结构构建四个标准数学运算符: union intfloat{ double f; uint8_t h[8]; uint16_t i[4]; uint32_t j[2]; uint64_t k; intfloat(double g){f = g;} intfloat(){k = 0;} } 这样操作本身就只能操纵或访问整数部分(因此也不能在操作过程中的任何时候都与double进行比较),并且结果是完全相同的(对于非数字结果,例如,功能上是等效的NaN)好像相应的数学运算已直接应用于double。 您可以选择要操作的整数部分,甚至可以在不同的运算符之间使用不同的整数部分。(尽管我不确定您是否要这样做,您也可以选择从联合中的任何字段中删除“未签名”。) 您的分数是四个运算符中每个字符的代码长度总和。最低分获胜。 对于不熟悉IEEE 754规范的我们来说,这是一篇有关Wikipedia的文章。 编辑: 03-06 08:47在intfloat结构中添加了构造函数。您可以使用它们进行测试,而不必手动设置double /etc。

1
破解密码
我设计了一个简单的随机生成器,使用乘法和模数方法以混沌的方式循环两个数字。为此很好。 如果我将其用作密码生成器,则由于攻击者可以以计算有效的方式对一系列随机数进行种子反向工程,因此它容易受到已知的明文攻击。 为了证明密码破解,找到合法的种子值对,它们在[0; 255]范围内连续生成7个零,并且使用尽可能少的功率,CPU时间等。 这是用JavaScript编写的随机生成器: function seed(state1,state2){ //Constants var mod1=4294967087 var mul1=65539 var mod2=4294965887 var mul2=65537 function random(limit){ //Cycle each state variable 1 step state1=(state1*mul1)%mod1 state2=(state2*mul2)%mod2 //Return a random variable return (state1+state2)%limit } //Return the random function return random } //Initiate the random generator using 2 integer values, //they must …

9
解码隐藏的消息!
介绍 有一天,您只是在CIA的办公室里放松,突然间您在计算机上看到警报。您的程序刚刚截获了数百条编码消息!快速检查可以发现编码规则,但是您需要一个程序才能快速解码。 挑战 您将得到一个字符串列表,以逗号分隔。每个字符串将包含: 编码消息的一部分 如果不是形式,则它是编码消息的一部分a=b。请注意,如果是,则它是消息的一部分ab=c。将此字符串添加到编码消息中。 编码方案的一部分 这将采用的形式a=b。这意味着消息中的所有a必须替换为b。请注意,它可能是a==,表示所有a必须替换为=。 然后,您的程序必须输出消息,并使用找到的方案对其进行解码。 其他信息:您的输入将仅包含用于分隔字符串的逗号。它可能包含其他字符,例如!1#等。它将不包含大写字母。解码信息的各个位不会相互解码。只有消息受解码信息影响。每个字符只能有一个替换,例如:"io,"i=u","i=g" 例子 输入:"ta","y=s","y","a=e","b=t","b"," ","j","j=1" 输出:test 1 输入:"z=p","zota","g=e","yugkb","y=t","u=o","k=s","li","fg","b==" 输出:potatoes=life 输入:"p","=","==n","ot","p=a","hiz","i=e","z=r" 输出:another 这是代码高尔夫球,因此最短答案以字节为单位!

5
CipherSaber加密
实施一个CipherSaber加密程序,如下所述。指导原则: 以字节为单位的最小条目获胜。 但是,与规范高尔夫球规范不同的是,欢迎您发布有趣的条目,即使它们不是认真的高尔夫条目。 条目通常是一个程序,该程序从标准输入中获取纯文本,并将密文写入到标准输出中,并使用您喜欢的某种方式(由用户指定)来指定密钥。 但是,如果您希望将此作为一个过程来实现,那也很好。 IV必须来自加密安全的伪随机数生成器。如果您的语言不支持,请选择其他语言。;-) 请不要使用任何特定于加密货币的库,系统调用或指令(上述PRNG除外)。当然,通用的低级按位运算也可以。 CipherSaber是RC4 / Arcfour的变体,因此我将先描述后者,然后再对CipherSaber进行更改。 0. RC4 / Arcfour Arcfour在其他地方已完全指定,但出于完整性考虑,我将在此处进行描述。(如果互联网草稿与本说明存在任何差异,则前者为规范性。) 按键设定 设置两个数组S和S2,两个数组的长度均为256,其中k_1是密钥的第一个字节,k_n也是最后一个。 S = [0, ..., 255] S2 = [k_1, ..., k_n, k_1, ...] (S2一次又一次地填充密钥的字节,直到所有256个字节都被填充。) 然后,初始化j为0,并随机播放256次: j = 0 for i in (0 .. 255) j = (j + S[i] + S2[i]) mod 256 swap …

6
解决对角Burrows-Wheeler变换
介绍 在此挑战中,您将解决对角线Burrows-Wheeler变换。这是什么是对角Burrows-Wheeler变换的一般概述。要对消息进行编码,必须首先确保其长度为奇数(即5、7、9等)。然后,n通过来构建网格,n其中n消息的长度在哪里。第一行是原始消息。此后的每一行都是其上方的一行,但向左移动了1个字符,第一个字符向后移动。例如: Hello World ello WorldH llo WorldHe lo WorldHel o WorldHell WorldHello WorldHello orldHello W rldHello Wo ldHello Wor dHello Worl 然后,将NW到SE对角线上的每个字母放入一个新字符串中: Hello World H ello WorldH l llo WorldHe o lo WorldHel W o WorldHell r WorldHello d WorldHello e orldHello W l rldHello Wo (space) ldHello Wor …

2
通过模式分析解密
系统会为您提供一个加密的字符串,并使用非常简单的替换密码对其进行加密。 问题 您不知道密码是什么,但是您知道密码文本是英语,并且英语中最常见的字母是etaoinshrdlucmfwypvbgkqjxz。唯一允许的字符是大写字母和空格。您可以进行基本分析-从单个字母开始,但是可以迁移到更复杂的多字母分析-例如,U几乎总是跟随Q,并且只有某些字母可以连续出现两次。 例子 clear : SUBMARINE TO ATTACK THE DOVER WAREHOUSE AND PORT ON TUESDAY SUNRISE cipher: ZOQ DUPAEYSRYDSSDXVYSHEYNRBEUYLDUEHROZEYDANYKRUSYRAYSOEZNDMYZOAUPZE clear : THE QUICK BROWN FOX BEING QUITE FAST JUMPED OVER THE LAZY DOG QUITE NICELY cipher: TNAEPDHIGEMZQJLEVQBEMAHL EPDHTAEVXWTEODYUASEQKAZETNAERXFCESQ EPDHTAELHIARC clear : BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO cipher: …

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.