Tulis program atau fungsi (atau set program / fungsi) untuk mengenkripsi dan mendekripsi data dengan spesifikasi sebagai berikut:
Enkripsi
Hitung hash XOR dari input dengan XOR-ing setiap byte satu sama lain.
XOR setiap byte input oleh hash ini.
Geser hasil empat bit ke kiri.
Pad sisi kiri dengan empat bit pertama hash XOR.
Pad sisi kanan dengan empat bit terakhir hash XOR.
Contoh
Masukan yang diberikan:
"G0lf"
(0x47306C66
)Hitung hash XOR:
0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D
XOR setiap byte oleh hash:
0x3A4D111B
Hasil yang diharapkan (setelah shift dan pad):
"s¤Ñ\x11½"
(0x73A4D111BD
)
Aturan
Program / fungsi Anda dapat input / output dari jenis apa pun yang masuk akal dalam bahasa pilihan golf Anda (String, Byte Array, dll) selama input / output adalah byte yang sebenarnya. Misalnya, Anda tidak dapat menghasilkan string heksidecimal.
Enkripsi dan dekripsi dapat dipisahkan menjadi program yang terpisah (skor akan menjadi ukuran gabungan mereka) atau satu. Metode tunggal dapat mengambil argumen apakah itu harus mengenkripsi atau mendekripsi.
Input untuk enkripsi bisa berukuran minimal 1 byte.
Input untuk dekripsi diharapkan minimal 2 byte.
Bytes yang tidak dapat dicetak tidak perlu diloloskan dalam output.
sumber
Jawaban:
CJam, 28 + 27 = 55 byte
Untuk setiap bagian saya menyajikan satu program yang mengharapkan input / output dalam bentuk array integer dan yang menggunakan string. Hitungan byte di atas adalah untuk versi array integer, tetapi skrip yang ditautkan dan penjelasannya adalah untuk versi berbasis string (yang dapat digunakan untuk menguji contoh yang diberikan dalam pertanyaan).
Enkripsi
Dekripsi
Ini skrip uji yang melakukan perjalanan penuh dan mencetak kode terenkripsi sebelum melakukan dekripsi lagi.
Penjelasan
sumber
CJam, 36 + 34 = 70 byte
Pendekatan yang sedikit berbeda menggunakan bentuk biner
Encrypter :
Bagaimana itu bekerja:
Decrypter :
Bagaimana itu bekerja:
Coba enkripsi dan decrypter online
sumber
Pyth, 69 byte
Ini menggabungkan enkripsi dan dekripsi, cukup tambahkan
0
argumen as untuk enkripsi atau1
untuk dekripsi. Alasannya sederhana. Mengubah string menjadi bit (atau 4 bit integer) atau sebaliknya benar-benar panjang di Pyth. Dengan menggabungkan kedua fungsi menjadi satu program, saya dapat menyimpan banyak byte.Demonstrasi online: Enkripsi dan Dekripsi .
Penjelasan:
Bagian pertama mengubah input menjadi daftar integer 4-bit (setiap karakter dapat dikonversi menjadi 2 integer 4-bit) dan menyimpannya di
K
.Bagian kedua menentukan nilai hash dan menyimpannya di
J
. JikaQ==0
ia menghitungnya dengan xor, jika tidak maka akan mengambil nilai pertama dan terakhir dariK
.Bagian selanjutnya melakukan xor menggunakan nilai hash. Ketika
Q == 0
itu dilakukan pada daftar lengkapK
, jika tidak hanya pada daftarK
tanpa nilai pertama dan terakhir.Dan bagian terakhir mengkonversi
K
kembali ke karakter:sumber
Javascript ( ES6 ) 83 + 73 = 156
Kedua fungsi mengambil input sebagai dan ouput array angka untuk mewakili byte.
Enkripsi
858483Dekripsi
7573Demonstrasi (khusus Firefox)
Menggunakan String 131 + 129 = 260
Dan hanya untuk bersenang-senang ... inilah beberapa versi yang menggunakan string untuk input / output sebagai gantinya.
sumber