XOR, programlarınızı diğer programların kaynağıyla şifreler


24

Kaynak kodlarının baytları birlikte XOR-d olduğunda, tümü aynı dilde üçüncü, geçerli bir program üretecek şekilde iki program yazın. Üç programın her birinin bayt cinsinden uzunluğu aynı olmalıdır.

İlk program çıktı vermeli A. İkinci program çıktı vermeli B. Üçüncü program çıktı vermelidir C.

Yeni bir satır isteğe bağlıdır, ancak yeni bir satır çıkarsa, diğerlerinin ikisi de gerekir.

Herhangi bir komut satırı bayrağı kullanıyorsanız, her program için aynı olanları yapmalısınız, yani üç program da aynı şekilde yürütülmelidir. Geleneksel olarak aynı karakter kombinasyonuyla başlayan PHP gibi bir dil kullanıyorsanız, örneğin, <?ancak bunun yerine kullanabileceğiniz karakterleri bırakan bir komut satırı seçeneği vardır, yani PHP sadece komut satırından çalıştırılmalıdır.

Girişe izin verilmiyor. Her program kendi kendine yeten olmalıdır.

Programınız tamamen ASCII'de yazılmışsa, aşağıdaki tablolar yardımcı olabilir:

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

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

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

DÜZENLE

Orijinal olarak açıkça yasaklamadığım için yazdırmayan karakterleri kullanmama izin verilir . Ancak, yalnızca yazdırılabilir karakterleri de içeren bir sürüm göndermek istiyorsanız bu harika olur! (En kısa olanı puanlayın.) Kontrol kodlarını kullanmanın "akıllı faktörü" şimdi biraz yıprandı ...

SON DÜZENLEME

Aynı bloktan iki kodun XOR'u verilmesi, 0x20'den daha az bir kod üretecektir, bu nedenle geçerli bir yazdırılabilir ASCII kodu değildir, örneğin 0x41 ( A) XOR 0x5A ( Z) = 0x1B. Farklı bloklardan herhangi iki kodun XOR'u verilmesi, üçüncü bloktan bir kod üretecektir, örneğin 0x61 ( a) 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  @`

Farklı sütunlarından iki karakter yukarı bakın ve mesela diğer sütunda, öyle onların kesişim karakteri almak Bve e: "BbXOR %Eeolduğunu 'Gg. Bİkinci sütun ve eüçüncü sütun, böylece ilk kolondan karakter almak olup 'Gg: '.

Örnek kaynak:

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

Her sütunda yalnızca bir rakam, bir büyük harf ve bir küçük harf olabileceğini unutmayın. Her sütun için ilk programda istediğiniz herhangi bir karakteri, ardından ikinci programda 64 karakter arasından seçiminizi ancak üçüncü programda yalnızca bir olası karakteri kullanabilirsiniz. 0x7F hiçbir yerde geçerli değil.

Unicode kullanıyorsanız, XOR kodunu doğrulamak size kalmıştır ve nasıl kodlandığını söylemelisiniz, örneğin UTF-8, UTF-16, vb. Her dosya aynı kodlamayı kullanmalıdır.

Puan: Bir programın uzunluğu. En az bayt kazandı!

Yanıtlar:


13

GolfScript, 6 bayt

bir

A'AA'|

B

cdc"B"

C

"C"ce^

|ve ^setwise ya da ve xor, boş girdi dizesiyle, dizedeki kopyaları silmek dışında hiçbir şey yapmaz.

Orijinal versiyon (yazdırılamayan karakterlerle)

bir

Xz'A'v

B

z9\x05"B"

C

"C"ceT

GolfScript tanımsız şeyleri görmezden gelir ve üç program sadece 'A' "B" "C".


12

Javascript, 23 bayt

Program A:

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

Program B:

alert(FL$RSsYnYW1f='B')

Program C:

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

Dönüştürmeyi aşağıdaki işlevle test edebilirsiniz:

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('');
}

Güzel bir!!! Bunu gösteren bir yığın parça ekleyebilirsiniz.
Ismael Miguel

3

PHP, 15 + 1 bayt

Bu bir kolay Gerçekten beklenenden daha zor, ama eğlenceli!
Ne yazık ki, bu geçersiz cevaplar nedeniyle 3. yeniden yazma.

Bu sefer, konsolda çalıştırmak için kullanılır (parametre kullanılarak -r).

Program A:

echo A;E925Z9A;

Program B:

echo B; zzzzzz;

XORing'in Sonucu:

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

Hex dökümü:

   |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 yankıdan önce \0ve \3chars olması konusunda uyarılar atacak , ama bu ihmal edilebilir.
Bu sadece uyarılar!
Hala çalışır ve doğru cevabı verir!


Konsolunuzda bunu çalıştırmayı deneyin:

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

Yapamazsan, şunlardan birini dene:

Hala yapamıyorsanız, kodu kendiniz çalıştırın:

<?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 );

Eski kod, geçersiz:

Program A:

<?=A;zzzzz;

Program B:

<?=B;FEG9A;

XORing'in Sonucu:

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

Aslında \x00konsolu yazamıyorum ama bunları \x03eserler ile değiştiriyorum ve \x00PHP içinde kendi sunucumda hala çalışıyor, bu yüzden cevabınızın şimdi geçerli olduğunu kabul ediyorum! Ayrıca tüm hataları bastırmak için bir bayrak kullanmak zorunda kaldım: php -d error_reporting=0 -r "^C^C^C^C^C^CeCHO C;^C"Çıktılar C. Stderr yönlendirmesi ( 2>Windows altında) çıktıdaki tüm hataları göstermedi.
CJ Dennis

Windows konsolundaki programınız: "♥ eCHO C;"!
CJ Dennis

@CJDennis Uyarılar her zaman dikkate alınmaz. Ölümcül bir hata olsaydı, en kötüsü olurdu. Ama XORING yaparken, bunun çıktısını tuhaf buluyorum. Ama belki de bu \3yüzden, kalp kulübü olarak gösterilen oradaki. Ama -dbayrağa bayrağını eklememi ister misin ?
Ismael Miguel

GolfScript kodunu geçmediğiniz için endişelenmeyin. 6 baytlık bir sürüm bulursanız, tekrar gözden geçirmem gerekecek! Ama php.ini dosyamı düzgün çalışabilmesi için yeniden yapılandırmadan gerçekten çok çalışmak zorunda kaldım! Windows'un \x03kalbe dönüşmesini sevdim ! Windows ♥ PHP!
CJ Dennis

1
Evet, @tüm hataları bastırmayı başardı!
CJ Dennis

3

Pip, 4 bayt

User23013 GolfScript olmayan baskı ASCII kullandığından, ben de aynı şeyi düşündüm Pip . Yönlendirme gerektiriyor stderr, ancak sorun değil , değil mi?

bir

??'A

buradaki iki ?s, ASCII karakterini 0 temsil eder.

B

'C'B

C

'C??

buradaki iki ?s, sırasıyla 0 ve 3 ASCII karakterlerini temsil eder.

Her programı bir dosyaya yerleştirin ( A.pipörneğin). Linux'ta şunları yapın:

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

Windows'ta:

pip.py A.pip 2>nul

Hata çıkışı verboten ise, yazdırılabilir ASCII'de 5 baytlık bir çözüm:

pAa'A
 f"B"
P'Cec

Evet, hem yönlendirici stderr (olduğu gibi çirkin!) Hem de yazdırılmayan karakterleri kullanmaya izin verilir. Yine de tamamen basılabilir bir versiyona gönderdiğiniz için teşekkür ederim!
CJ Dennis,

2

Mikroscript , her biri 8 bayt

A: 'APhgap)

B: 'BPh@" A

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


Kaynaktaki kontrol kodları ile pek çok dilin çok bağışlayıcı olduğunu anlamadım. Bazıları yazdırmama kodları kullanan diğer cevaplara bir bakın. Aynı şeyi yapmaktan çekinmeyin!
CJ Dennis,

Baskısız ASCII kullanmamanın gerektiğini düşündüm ama yanılıyor olabilirim. EDIT: Ve şimdi görüyorum ki onu değiştirdiniz. Tamam, ne yapabileceğime bir bakayım.
SuperJedi224

1
Olmamalı mıydı <0><3><0><0>...?
CJ Dennis

Haklısın. Bunu gösterdiğin için teşekkürler.
SuperJedi224

2

Python, 19 15 14 bayt

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 karakteri gördükten sonra pythonun (Ubuntu 14.04'te 2.7.6) bu satırın geri kalanını görmezden geleceğini fark ettiğimde bu çözümle karşılaştım.

Bir kez 1 bayt kısaltıldı Baskı sonrası boşluğa ihtiyaç duyulmadığını fark ettim. NUL karakterinin de yeni satırın yok sayılmasına neden olduğunu fark ettiğimde, bir anahtar kelimenin ortasındaki satırları kırmak için kullanabildiğimde 4 bayt daha kısalttı.


0

Çip , 8 bayt

Tüm bayrak gerektirir -w.

Program A

a*gt*...

( .boş karakter \x00)

Program B

...*gb*t

( .boş karakter \x00)

Program C

a*g^Mb*t

Hem A hem de B, her biri üç uyarı üretir (örneğin:) 1:6 WARN: '' (0) is not a valid character, ancak stderr'e gittikleri için güvenle göz ardı edilebilirler. Öğeler geçerlidir ^ve Mburada hiçbir şey yapmayın.

Bunun, yazdırılamaz izin verilenlerle yapılabilecek en iyisi olduğundan eminim. Bu ispatın tamamlandığından emin değilim ama işte:

Bir gerektirir a, g, tve bu unsurları etkinleştirmek için bir yol (iki sembollerin minimum bunun için gereklidir ve *burada en basit seçenektir). Benzer şekilde,
B gerektirir b, g, tve iki *s, ve
Cı-gerektirir a, b, g, tve iki *s.

C sembollerini doğrudan A ve B'den ödünç alırsa, *talep edilmeden kalan iki harf ve iki harf olacaktır . (Benim uygulamada A tve B g). Bu dört element üst üste gelebilir, böylece C'ye karışabilirler ( bu durumda ^ve üreten M). Şimdi bu iki karışık elemente ve yukarıdan altı gerekli elemente sahibiz (C, 6, diğerlerine 5 gerektirir, ancak toplamda 8 element için burada maksimum () gerekir).


Çip (uyarısız), 10 bayt

Tüm bayraklar gerektirir -wo.

Program A

a*HH^t*Gg 

(arkada bir boşluk var)

Program B

KKb*t*^g G

Program C

*a*b*^t Gg

Bu, yazdırılabilir ASCII içinde aşağıdaki gibi yapabileceğimizin en iyisidir: Birleştirilmiş üç programın toplam 2 asn, 2 bsn, 3 gsn ve 3 tsn'ye ihtiyacı var. Bu karakterlerden hiçbiri diğerine geçemediğinden, 2+2+3+3 = 10ayrı pozisyonlara ihtiyacımız var .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.