他のプログラムのソースを使用してプログラムをXOR暗号化する


24

ソースコードのバイトがXOR-dである場合、すべて同じ言語で3番目の有効なプログラムが生成されるように、2つのプログラムを作成します。3つのプログラムのそれぞれの長さ(バイト単位)は同一でなければなりません。

最初のプログラムが出力されるはずAです。2番目のプログラムが出力するはずBです。3番目のプログラムが出力するはずCです。

改行はオプションですが、一方が改行を出力する場合、他の両方も必要です。

コマンドラインフラグを使用する場合は、各プログラムで同じフラグを使用する必要があります。つまり、3つのプログラムはすべて同じ方法で実行する必要があります。同じ文字の組み合わせで伝統的に始まるPHPのような言語を使用している場合、たとえば<?、それらの文字をドロップするコマンドラインオプションがある場合、代わりに使用できます。つまり、PHPはコマンドラインからのみ実行する必要があります。

入力は許可されていません。各プログラムは自己完結型でなければなりません。

プログラムが完全にASCIIで記述されている場合、次の表が役立つ場合があります。

Codes 0x20 - 0x3F
 !"#$%&'()*+,-./
0123456789:;<=>?

Codes 0x40 - 0x5F
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_

Codes 0x60 - 0x7E
`abcdefghijklmno
pqrstuvwxyz{|}~

編集

非印刷文字の使用、元々明示的に禁止していなかったため許可されています。ただし、印刷可能な文字のみを使用するバージョンを投稿したい場合は素晴らしいことです!(どちらか短い方を採点してください。)制御コードを使用する「賢い要因」は、やや衰えています...

編集を終了

同じブロックから任意の2つのコードをAXORすると、0x20未満のコードが生成されるため、有効な印刷可能なASCIIコードではありません。例:0x41()XOR 0x5A(Z)= 0x1B。異なるブロックから任意の2つのコードをaXORすると、3番目のブロックからコードが生成されます(例:0x61()XOR 0x54(T)= 0x35(5)。

    |  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_
--- + --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
 @` |  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_
!Aa | !Aa  @` #Cc "Bb %Ee $Dd 'Gg &Ff )Ii (Hh +Kk *Jj -Mm ,Ll /Oo .Nn 1Qq 0Pp 3Ss 2Rr 5Uu 4Tt 7Ww 6Vv 9Yy 8Xx ;[{ :Zz =]} <\| ?_ >^~
"Bb | "Bb #Cc  @` !Aa &Ff 'Gg $Dd %Ee *Jj +Kk (Hh )Ii .Nn /Oo ,Ll -Mm 2Rr 3Ss 0Pp 1Qq 6Vv 7Ww 4Tt 5Uu :Zz ;[{ 8Xx 9Yy >^~ ?_ <\| =]}
#Cc | #Cc "Bb !Aa  @` 'Gg &Ff %Ee $Dd +Kk *Jj )Ii (Hh /Oo .Nn -Mm ,Ll 3Ss 2Rr 1Qq 0Pp 7Ww 6Vv 5Uu 4Tt ;[{ :Zz 9Yy 8Xx ?_ >^~ =]} <\|
$Dd | $Dd %Ee &Ff 'Gg  @` !Aa "Bb #Cc ,Ll -Mm .Nn /Oo (Hh )Ii *Jj +Kk 4Tt 5Uu 6Vv 7Ww 0Pp 1Qq 2Rr 3Ss <\| =]} >^~ ?_ 8Xx 9Yy :Zz ;[{
%Ee | %Ee $Dd 'Gg &Ff !Aa  @` #Cc "Bb -Mm ,Ll /Oo .Nn )Ii (Hh +Kk *Jj 5Uu 4Tt 7Ww 6Vv 1Qq 0Pp 3Ss 2Rr =]} <\| ?_ >^~ 9Yy 8Xx ;[{ :Zz
&Ff | &Ff 'Gg $Dd %Ee "Bb #Cc  @` !Aa .Nn /Oo ,Ll -Mm *Jj +Kk (Hh )Ii 6Vv 7Ww 4Tt 5Uu 2Rr 3Ss 0Pp 1Qq >^~ ?_ <\| =]} :Zz ;[{ 8Xx 9Yy
'Gg | 'Gg &Ff %Ee $Dd #Cc "Bb !Aa  @` /Oo .Nn -Mm ,Ll +Kk *Jj )Ii (Hh 7Ww 6Vv 5Uu 4Tt 3Ss 2Rr 1Qq 0Pp ?_ >^~ =]} <\| ;[{ :Zz 9Yy 8Xx
(Hh | (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_ 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww
)Ii | )Ii (Hh +Kk *Jj -Mm ,Ll /Oo .Nn !Aa  @` #Cc "Bb %Ee $Dd 'Gg &Ff 9Yy 8Xx ;[{ :Zz =]} <\| ?_ >^~ 1Qq 0Pp 3Ss 2Rr 5Uu 4Tt 7Ww 6Vv
*Jj | *Jj +Kk (Hh )Ii .Nn /Oo ,Ll -Mm "Bb #Cc  @` !Aa &Ff 'Gg $Dd %Ee :Zz ;[{ 8Xx 9Yy >^~ ?_ <\| =]} 2Rr 3Ss 0Pp 1Qq 6Vv 7Ww 4Tt 5Uu
+Kk | +Kk *Jj )Ii (Hh /Oo .Nn -Mm ,Ll #Cc "Bb !Aa  @` 'Gg &Ff %Ee $Dd ;[{ :Zz 9Yy 8Xx ?_ >^~ =]} <\| 3Ss 2Rr 1Qq 0Pp 7Ww 6Vv 5Uu 4Tt
,Ll | ,Ll -Mm .Nn /Oo (Hh )Ii *Jj +Kk $Dd %Ee &Ff 'Gg  @` !Aa "Bb #Cc <\| =]} >^~ ?_ 8Xx 9Yy :Zz ;[{ 4Tt 5Uu 6Vv 7Ww 0Pp 1Qq 2Rr 3Ss
-Mm | -Mm ,Ll /Oo .Nn )Ii (Hh +Kk *Jj %Ee $Dd 'Gg &Ff !Aa  @` #Cc "Bb =]} <\| ?_ >^~ 9Yy 8Xx ;[{ :Zz 5Uu 4Tt 7Ww 6Vv 1Qq 0Pp 3Ss 2Rr
.Nn | .Nn /Oo ,Ll -Mm *Jj +Kk (Hh )Ii &Ff 'Gg $Dd %Ee "Bb #Cc  @` !Aa >^~ ?_ <\| =]} :Zz ;[{ 8Xx 9Yy 6Vv 7Ww 4Tt 5Uu 2Rr 3Ss 0Pp 1Qq
/Oo | /Oo .Nn -Mm ,Ll +Kk *Jj )Ii (Hh 'Gg &Ff %Ee $Dd #Cc "Bb !Aa  @` ?_ >^~ =]} <\| ;[{ :Zz 9Yy 8Xx 7Ww 6Vv 5Uu 4Tt 3Ss 2Rr 1Qq 0Pp
0Pp | 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo
1Qq | 1Qq 0Pp 3Ss 2Rr 5Uu 4Tt 7Ww 6Vv 9Yy 8Xx ;[{ :Zz =]} <\| ?_ >^~ !Aa  @` #Cc "Bb %Ee $Dd 'Gg &Ff )Ii (Hh +Kk *Jj -Mm ,Ll /Oo .Nn
2Rr | 2Rr 3Ss 0Pp 1Qq 6Vv 7Ww 4Tt 5Uu :Zz ;[{ 8Xx 9Yy >^~ ?_ <\| =]} "Bb #Cc  @` !Aa &Ff 'Gg $Dd %Ee *Jj +Kk (Hh )Ii .Nn /Oo ,Ll -Mm
3Ss | 3Ss 2Rr 1Qq 0Pp 7Ww 6Vv 5Uu 4Tt ;[{ :Zz 9Yy 8Xx ?_ >^~ =]} <\| #Cc "Bb !Aa  @` 'Gg &Ff %Ee $Dd +Kk *Jj )Ii (Hh /Oo .Nn -Mm ,Ll
4Tt | 4Tt 5Uu 6Vv 7Ww 0Pp 1Qq 2Rr 3Ss <\| =]} >^~ ?_ 8Xx 9Yy :Zz ;[{ $Dd %Ee &Ff 'Gg  @` !Aa "Bb #Cc ,Ll -Mm .Nn /Oo (Hh )Ii *Jj +Kk
5Uu | 5Uu 4Tt 7Ww 6Vv 1Qq 0Pp 3Ss 2Rr =]} <\| ?_ >^~ 9Yy 8Xx ;[{ :Zz %Ee $Dd 'Gg &Ff !Aa  @` #Cc "Bb -Mm ,Ll /Oo .Nn )Ii (Hh +Kk *Jj
6Vv | 6Vv 7Ww 4Tt 5Uu 2Rr 3Ss 0Pp 1Qq >^~ ?_ <\| =]} :Zz ;[{ 8Xx 9Yy &Ff 'Gg $Dd %Ee "Bb #Cc  @` !Aa .Nn /Oo ,Ll -Mm *Jj +Kk (Hh )Ii
7Ww | 7Ww 6Vv 5Uu 4Tt 3Ss 2Rr 1Qq 0Pp ?_ >^~ =]} <\| ;[{ :Zz 9Yy 8Xx 'Gg &Ff %Ee $Dd #Cc "Bb !Aa  @` /Oo .Nn -Mm ,Ll +Kk *Jj )Ii (Hh
8Xx | 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_ 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg
9Yy | 9Yy 8Xx ;[{ :Zz =]} <\| ?_ >^~ 1Qq 0Pp 3Ss 2Rr 5Uu 4Tt 7Ww 6Vv )Ii (Hh +Kk *Jj -Mm ,Ll /Oo .Nn !Aa  @` #Cc "Bb %Ee $Dd 'Gg &Ff
:Zz | :Zz ;[{ 8Xx 9Yy >^~ ?_ <\| =]} 2Rr 3Ss 0Pp 1Qq 6Vv 7Ww 4Tt 5Uu *Jj +Kk (Hh )Ii .Nn /Oo ,Ll -Mm "Bb #Cc  @` !Aa &Ff 'Gg $Dd %Ee
;[{ | ;[{ :Zz 9Yy 8Xx ?_ >^~ =]} <\| 3Ss 2Rr 1Qq 0Pp 7Ww 6Vv 5Uu 4Tt +Kk *Jj )Ii (Hh /Oo .Nn -Mm ,Ll #Cc "Bb !Aa  @` 'Gg &Ff %Ee $Dd
<\| | <\| =]} >^~ ?_ 8Xx 9Yy :Zz ;[{ 4Tt 5Uu 6Vv 7Ww 0Pp 1Qq 2Rr 3Ss ,Ll -Mm .Nn /Oo (Hh )Ii *Jj +Kk $Dd %Ee &Ff 'Gg  @` !Aa "Bb #Cc
=]} | =]} <\| ?_ >^~ 9Yy 8Xx ;[{ :Zz 5Uu 4Tt 7Ww 6Vv 1Qq 0Pp 3Ss 2Rr -Mm ,Ll /Oo .Nn )Ii (Hh +Kk *Jj %Ee $Dd 'Gg &Ff !Aa  @` #Cc "Bb
>^~ | >^~ ?_ <\| =]} :Zz ;[{ 8Xx 9Yy 6Vv 7Ww 4Tt 5Uu 2Rr 3Ss 0Pp 1Qq .Nn /Oo ,Ll -Mm *Jj +Kk (Hh )Ii &Ff 'Gg $Dd %Ee "Bb #Cc  @` !Aa
?_ | ?_ >^~ =]} <\| ;[{ :Zz 9Yy 8Xx 7Ww 6Vv 5Uu 4Tt 3Ss 2Rr 1Qq 0Pp /Oo .Nn -Mm ,Ll +Kk *Jj )Ii (Hh 'Gg &Ff %Ee $Dd #Cc "Bb !Aa  @`

別の列から2つの文字を検索し、他の列にあります彼らの交差点から文字を選んで、例えばBe"BbXORです。は2番目の列で3番目の列なので、次の最初の列から文字を選択します。%Ee'GgBe'Gg'

ソースの例:

 Ld+|?dpHs'-,pUe    (Program 1)
~bWn=n5Xe!t_G($3    (Program 2)
^.3EAQQ(-RSrkXqV    (Program 3)

各列には、1つの数字、1つの大文字、および1つの小文字しか使用できないことに注意してください。各列には、最初のプログラムで好きな文字を使用し、2番目のプログラムでは64文字を選択できますが、3番目のプログラムでは1文字のみを使用できます。0x7Fはどこでも無効です。

Unicodeを使用する場合、XOR-ingの検証はユーザー次第であり、UTF-8、UTF-16などのエンコード方法を指定する必要があります。各ファイルは同じエンコードを使用する必要があります。

スコア:1つのプログラムの長さ。少ないバイトが勝ちます!

回答:


13

GolfScript、6バイト

A

A'AA'|

B

cdc"B"

C

"C"ce^

|そして^、入力文字列が空のsetwise orおよびxorで、文字列内の重複を削除するだけです。

元のバージョン(印刷できない文字を含む)

A

Xz'A'v

B

z9\x05"B"

C

"C"ceT

GolfScriptは未定義のものを無視し、3つのプログラムはただ'A' "B" "C"です。


12

Javascript、23バイト

プログラムA:

alert(' A '[~-~~2],'B')

プログラムB:

alert(FL$RSsYnYW1f='B')

プログラムC:

\0\0\0\0\0\0alert('C')\0;\0\0\03\0\0

次の関数を使用して変換をテストできます。

function xorString(a, b) {
  b = b || '';
  var length = Math.max(a.length, b.length);
  var chars = a.split('').map(function(charA, i) {
    var charB = b[i] || ' ';
    return String.fromCharCode(charA.charCodeAt(0) ^ charB.charCodeAt(0));
  });

  return chars.join('');
}

良いですね!!!これを示すstacksnippetを含めることができます。
イスマエルミゲル

3

PHP、15 + 1バイト

これは かんたん 本当に予想以上に難しいが、楽しい!
悲しいことに、これは無効な回答による3回目の書き換えです。

今回は、コンソールで実行することを意図しています(パラメーターを使用-r)。

プログラムA:

echo A;E925Z9A;

プログラムB:

echo B; zzzzzz;

XORingの結果:

\0\0\0\0\0\3\0eCHO C;\0 //base 64: AAAAAAADAGVDSE8gQzsA

六角ダンプ:

   |00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|      TEXT      
--------------------------------------------------------------------
00 |00|00|00|00|00|03|00|65|43|48|4F|20|43|3B|00|  |.......eCHO C;.
====================================================================

PHPは、エコーの前に\0とを持っていることについて警告をスローします\3が、それは無視できます。
それは単なる警告です!
それでも実行され、正しい答えが出力されます!


コンソールでこれを実行してみてください:

php -r "@eval('echo B; zzzzzz;' ^ 'echo A;E925Z9A;');"

できない場合は、次のいずれかを試してください。

それでもできない場合は、自分でコードを実行します。

<?php

error_reporting( 0 );

$program_a = 'echo A;E925Z9A;';

$program_b = 'echo B; zzzzzz;';

eval( $program_a );

eval( $program_b );

eval( $program_c = $program_a ^ $program_b );

echo PHP_EOL, 'a ^ b = ';

var_dump( $program_c );

古いコード、無効:

プログラムA:

<?=A;zzzzz;

プログラムB:

<?=B;FEG9A;

XORingの結果:

\0\0\0\0<?=C;\0 //base64: AAAAAwA8Pz1DOwA=

私は実際\x00にコンソールに入力することはできませんが、それらを\x03作品に置き換え\x00、サーバー上のPHP自体内でまだ実行されているので、あなたの答えは今有効であると仮定しています!また、すべてのエラーを抑制するためにフラグを使用する必要がありました:php -d error_reporting=0 -r "^C^C^C^C^C^CeCHO C;^C"Outputs C。(2>Windowsの下で)stderrをリダイレクトしても、出力からのすべてのエラーが抑制されませんでした。
CJデニス

Windowsコンソールのプログラム: "♥eCHO C;"!
CJデニス

@CJDennis警告は常に無視されます。致命的なエラーである場合、最悪です。しかし、XORを実行すると、それが出力されるのは奇妙です。しかし、おそらくそれは\3そこにあるからであり、それはハートクラブとして示されています。しかし-d、カウントにフラグを追加してほしいですか?
イスマエル・ミゲル

GolfScriptコードを破っていないので、心配する必要はありません。6バイトバージョンが見つかった場合は、再検討する必要があります。しかし、php.iniファイルを再構成せずに一生懸命作業しなければ、きれいに機能しませんでした!Windowsが\x03ハートに変わったのが好きでした!Windows♥PHP!
CJデニス

1
はい、@すべてのエラーを抑制できました!
CJデニス

3

ピップ、4バイト

user23013はGolfScriptで非印刷ASCIIを使用しているため、Pipでも同じことができると考えました。リダイレクトが必要ですstderr、大丈夫ですよね

A

??'A

2つ?のsはASCII文字0を表します。

B

'C'B

C

'C??

2つ?のsはそれぞれASCII文字0および3を表します。

各プログラムをファイルに配置します(A.pipたとえば)。Linuxの場合:

./pip.py A.pip 2>/dev/null

Windowsの場合:

pip.py A.pip 2>nul

エラー出力が冗長な場合、印刷可能なASCIIの5バイトのソリューションを次に示します。

pAa'A
 f"B"
P'Cec

はい、stderrのリダイレクト(そのままではugい!)と非印刷文字の使用の両方が許可されます。ただし、完全に印刷可能なバージョンを投稿していただきありがとうございます!
CJデニス

2

マイクロスクリプト、各8バイト

A: 'APhgap)

B: 'BPh@" A

C: <0><3><0><0>'CPh


ソースに制御コードがあるため、多くの言語が非常に寛容であることに気づきませんでした。他の回答を見てください。そのうちのいくつかは非印刷コードを使用しています。同じことをお気軽に!
CJデニス

非印刷ASCIIを使用しないと言ったと思いましたが、間違っているかもしれません。編集:そして今、あなたはそれを変更したことがわかります。さて、私は何ができるか見ていきます。
SuperJedi224

1
そうじゃない<0><3><0><0>...
CJデニス

あなたが正しい。ご指摘いただきありがとうございます。
SuperJedi224

2

Python、 19 15 14バイト

a.py

00000000  70 72 69 6e 00 28 32 50  69 0a 74 22 41 22        |prin.(2Pi.t"A"|

b.py

00000000  70 72 69 6e 74 22 42 22  00 64 00 00 02 00        |print"B".d....|

c.py

00000000  00 00 00 00 74 0a 70 72  69 6e 74 22 43 22        |....t.print"C"|

NUL文字が表示された後、python(Ubuntu 14.04で2.7.6)が残りの行を無視することに気付いたとき、このソリューションを思いつきました。

印刷後のスペースが不要であることに気付いた後、1バイト短縮されました。そして、NUL文字によって改行も無視されるため、それを使用してキーワードの途中で改行することができることに気付いた後、さらに4バイト短縮されました。


0

チップ、8バイト

すべてフラグが必要です-w

プログラムA

a*gt*...

.はヌル文字です\x00

プログラムB

...*gb*t

.はヌル文字です\x00

プログラムC

a*g^Mb*t

AとBの両方がそれぞれ3つの警告を生成します(例1:6 WARN: '' (0) is not a valid character:)が、stderrに送られるため、無視しても問題ありません。要素^Mは有効ですが、ここでは何もしません。

私は、これが非印刷物が許可された状態でできる最高の方法であると確信しています。この証明が完全かどうかはわかりませんが、ここにあります:

Aは必要でagt、およびそれらの要素を有効にするにはいくつかの方法(二つのシンボルの最小値は、このために必要とされており、*ここでは最も簡単なオプションです)。同様に、
Bは必要bgt、および2つの*S、および
Cは、必要abgt、および2つの*S。

CがAおよびBからシンボルを直接借りる場合、2つ*の文字と2つのsが請求されずに残ります。(私の実装では、A tとBのg)。これらの4つの要素は、Cでマングルされるように重複させることができます(この場合、生成^およびMこの場合)。これで、これらの2つのマングルされた要素に加えて、上記の6つの必須要素(Cは6、残りは5だけですが、ここではmax()が必要です)、合計8つの要素があります。


チップ(警告なし)、10バイト

すべてのフラグが必要です-wo

プログラムA

a*HH^t*Gg 

(末尾にスペースがあります)

プログラムB

KKb*t*^g G

プログラムC

*a*b*^t Gg

これは、次のように、印刷可能なASCII内でできる最善の方法です。3つのプログラムを組み合わせて、合計2 a秒、2 b秒、3 g秒、3 t秒が必要です。これらのキャラクターはいずれも別のキャラクターに移行できないため、2+2+3+3 = 10別々の位置が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.