mdk.fr/content/pages/stegano/solutions.md

121 lines
3.6 KiB
Markdown
Raw Normal View History

2017-10-17 21:54:39 +00:00
status: hidden
title: Cybersécurité — Cryptography Solutions
slug: crypto-solutions-jooT8pheejo7eev.html
robots: noindex
## Hexdump
$ echo '/crypto-eithei7AiGi1Nei.html' | hexdump -C
00000000 2f 63 72 79 70 74 6f 2d 65 69 74 68 65 69 37 41 |/crypto-eithei7A|
00000010 69 47 69 31 4e 65 69 2e 68 74 6d 6c 0a |iGi1Nei.html.|
0000001d
>>> ''.join([chr(int(x, 16)) for x in '2f 63 72 79 70 74 6f 2d 65 69 74 68 65 69 37 41 69 47 69 31 4e 65 69 2e 68 74 6d 6c 0a'.split()])
'/crypto-eithei7AiGi1Nei.html\n'
## Rail Fence
/crypto-UNgoo7olouheiHi.html
/ p U o o i h
c y t - N o 7 l u e H . t l
r o g o h i m
/pUooihcyt-No7lueH.tlrogohim
/pUooihcyt-No7lueH.tlrogohim
## Mandatory Cæsar
>>> ''.join([chr(3 + ord(x)) for x in "/crypto-Ohchae7Ohku9aQu.html"])
2fu|swr0Rkfkdh:Rknx<dTx1kwpo
>>> ''.join([chr(ord(x) - 3) for x in '2fu|swr0Rkfkdh:Rknx<dTx1kwpo'])
'/crypto-Ohchae7Ohku9aQu.html'
## ASCII Translation
>>> plaintext = '/crypto-ahzooCeeghie4od.html'
>>> [ord(x) - min(ord(x) for x in plaintext) for x in plaintext]
[2, 54, 69, 76, 67, 71, 66, 0, 52, 59, 77, 66, 66, 22, 56, 56, 58, 59, 60, 56, 7, 66, 55, 1, 59, 71, 64, 63]
>>> for i in range(50):
... ''.join([chr(i + int(x)) for x in '2, 54, 69, 76, 67, 71, 66, 0, 52, 59, 77, 66, 66, 22, 56, 56, 58, 59, 60, 56, 7, 66, 55, 1, 59, 71, 64, 63'.replace(',', ' ').split()])
## XOR
>>> plaintext = '/crypto-ohnachu0Aithor9.html'
>>> [ord(x) ^ 0b00110011 for x in plaintext]
[28, 80, 65, 74, 67, 71, 92, 30, 92, 91, 93, 82, 80, 91, 70, 3, 114, 90, 71, 91, 92, 65, 10, 29, 91, 71, 94, 95]
>>> 28 ^ ord('/')
51
>>> ''.join([chr(int(x) ^ 51) for x in '28, 80, 65, 74, 67, 71, 92, 30, 92, 91, 93, 82, 80, 91, 70, 3, 114, 90, 71, 91, 92, 65, 10, 29, 91, 71, 94, 95'.split(', ')])
'/crypto-ohnachu0Aithor9.html'
## Route Cipher
/crypto-fa6tuodiethaiZ1.html
/crypto
-fa6tuo
diethai
Z1.html
>>> plaintext = '/crypto-fa6tuodiethaiZ1.html'
>>> grid = list(zip(*[iter(plaintext)]*7))
>>> for j in range(7):
... for i in range(4):
... print(grid[i][j], end='')
...
/-dZcfi1rae.y6thpthttuamooil
## JPEG comment
/crypto-pohxoh6Waegidoh.html
sha1sum content/pages/stegano/meta.jpg
3ff77e558b89d0901b01ac7891a32fea28aef88f content/pages/stegano/meta.jpg
(pelican-mdk) mdk@windhowl (master)$ hexdump -C content/pages/stegano/meta.jpg | grep -C2 html
00000240 fd a3 00 00 03 dc 00 00 c0 6e ff fe 00 1e 2f 63 |.........n..../c|
00000250 72 79 70 74 6f 2d 70 6f 68 78 6f 68 36 57 61 65 |rypto-pohxoh6Wae|
00000260 67 69 64 6f 68 2e 68 74 6d 6c ff db 00 43 00 08 |gidoh.html...C..|
00000270 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d |................|
00000280 0c 0b 0b 0c 19 12 13 0f 14 1d 1a 1f 1e 1d 1a 1c |................|
## PNG bits
/crypto-oopheeS9Pih1se7.html
>>> plaintext = '/crypto-oopheeS9Pih1se7.html'
>>> binary_plaintext = ''.join("{:08b}".format(ord(c)) for c in plaintext)
>>> input = cv2.imread('cat.png')
>>> for i, b in enumerate(binary_plaintext):
... input[0][i][2] = (input[0][i][2] & 0b11111110) + int(b)
...
>>> cv2.imwrite('cat2.png', input)
True
And in reverse:
>>> import cv2
>>> cat = cv2.imread('cat.png')
>>> low_bits = [pixel[2] & 1 for pixel in cat[0]]
>>> bytes = list(zip(*[iter(low_bits)]*8))
>>> ''.join([chr(int(''.join(str(bit) for bit in bits), 2)) for bits in bytes])
'/crypto-oopheeS9Pih1se7.html#É\x1a{Ú«'