# Crypto 01 writeup
:::spoiler
[toc]
:::
## Lab:ASCII practice
```
65 115 99 73 73 115 79 69 97 115 89
```
可以到維基百科慢慢[查表](https://zh.wikipedia.org/zh-tw/ASCII#%E5%8F%AF%E6%98%BE%E7%A4%BA%E5%AD%97%E7%AC%A6) ;也可以選擇寫 python script:
```python=
cipher = [65, 115, 99, 73, 73, 115, 79, 69, 97, 115, 89]
for i in cipher:
print(chr(i), end = '')
```
```
AscIIsOEasY
```
## Lab:numeric practice
```
請將 821091 轉成 16 進位
請將 0o337522 轉成 10 進位
請將 0b110011010 轉成 10 進位
```
可以選擇手算;也可以選擇寫 python script:
```python=
hex(821091) # 0xc8763
print(0o337522) # 114514
print(0b110011010) # 410
```
## Lab:Big Integer
```
cipher = 1001379969218778717835149010429266
```
你可以慢慢從整數->十六進位字串->整數->字元一路轉換下去:
```python=
cipher = 1001379969218778717835149010429266
hex_string = hex(cipher)[2:]
pt = ""
for i in range(0, len(hex_string), 2):
pt += chr(int(hex_string[i:i+2], 16))
print(pt)
```
也可以直接用 `bytes.fromhex()`
```python=
cipher = 1001379969218778717835149010429266
print(bytes.fromhex(hex(cipher)[2:]))
```
```
1_10V3_INT36eR
```
## Lab:encode Misc Challenge
hint 1:Big Integer + base64
hint 2:jpg
[Download Here](https://drive.google.com/file/d/1ezJd1_6RXapxdoihDTzQkyPG03aBbEY9/view)
這題比較複雜一點了,轉換過程依序為整數->十六進位字串->base64 string->binary,最後還要寫檔
```python=
from base64 import b64decode
import sys
sys.set_int_max_str_digits(500000)
with open("challenge.txt", "r") as f:
number = int(f.read())
hex_string = hex(number)[2:]
b64string = bytes.fromhex(hex_string)
binary = b64decode(b64string)
open("result.jpg", "wb").write(binary)
```

## Lab:Caesar Cipher
```
# 請嘗試解密 cipher
cipher = "VTXLTKVBIAXKATVDXKWBLVHOXKLMAXABWWXGLXVKXML"
```
丟工具,解決!
```
CAESARCIPHERHACKERDISCOVERSTHEHIDDENSECRETS
```
## Lab:Simple Substitution Cipher
```
# 請嘗試解密 cipher
cipher = "EHOLKOVSDFWKRWSMSKSMVZDOSSOHWPIXOWBHFGSNTIBXOHOQIPMVOGISSOHVWIVJHOUOIDSTOWOBHOSPOWWIZOCMSTMVBNJO"
```
再丟工具,解決!
```
FREQUENTLYSUBSTITUTINGLETTERSMAKESCRYPTOHACKEREJAMINEPATTERNSANDREVEALTHESECRETMESSAGEWITHINCODE
```
## Lab:Vigenère cipher
```
# 請找出加密的 key
cipher = "KVCFNDIDJEYJDYSHKAJUWOEBNMBSMXPORTHKXHOUYIYLUWLYEHNVNEDDXKPGVZIRQSFTDIIMVEENEYZXHMUCQCFNDJWZCTOSFKJUHJKPAOMNEDUDQPOBFKPEGVHQNUHFWHTVOLIDIBNGPDDUUCLJIOBWJWEBJALJQRMCFHTSTJDYVJOHXGPJVCUCZOGHYFPODZJOIHNRCHQRVCGYXYHHJXAMKHFYFZSPRSVFCUPNVRNDRMMKCXELYWZMJEUCJAASFFTRNDELFCYSUWGJNWWUVLHNQCQBOSXSIUPMZOEMKAPLNVCCFCYBYJWZMTJFZGUAUOYARWMHQCTVNLFNPHFYFVOZESTPJETIYEDDCHYMPDWFGCYYXUXMXLLSZOTZAWKRBBXMKDSMZOUDRKDRCOUPGVXSUWGJNEEKCBDTQOVPRSHSUXJIYCACPXLXUGQRRFMMUBXAZZBSYXYKIMEGFGMNBBHVYWUBIBAVNZTZLHAJCQCVXWARFYDKIMUENHBTDQCYOSABYTTTUJVBVGVWYCXIVEENEHYKJPDBESWDUQGNGLPDIMSKPZWPBZBAUIDIVWKMVEJOUGQLQCYUELTMOJEMKAPSKYIRBTTAQIIJXPWMFYXGVZHGNZIWEIEZMTPXFGPNWITPRRRJQHHGVEAQKAPTGBHMVGLYYBAGVYCTZLSOPBYLGVXHEHCZMDKERFPXKXQLFCVNUJNVIOBHEWDNKHICYTTSUNXGZTJGZLZCPGQLQGHBUXPQZNKLVAPXGOEBNMMTTHPHVEEYVTDNCHUDHZVTDTXODZJHETDKPNUURVTAUSDHZEKNLKYGVDELFQTUYJPGOZYZJALIJZSIJVXSJXTVMNDHKXNZUJVMHFKJFKQGDNSQFMPZJZCYTBBKYSTIOHKQULZLVCUABBLYYJJODZJZEWENGYUAYOKFJYDIJQEMUXAKPYULPSMMUOLZMPOHXGTTIVFPBABXIEGTIZPDKHHNKXXCISKDQCTMDNWMNTDZQAQJYVXNHJWDNYKSVPLYCKHMZWLJJXPOVWHLVGJKUWBYPYFJDQHRZWHZJPSOVZCCAKHZBTQZBFWQRGEKGYJFRIGFBYTIVMHDIBRNVNEDYWYJBYQZMEUZEWENGKKPFIBYEVWVKAEMVLD"
```
一樣丟工具解決,像是 [guballa](https://www.guballa.de/vigenere-solver) 就可以直接解掉。
不過這題比較特別的是,其他三個工具正常情況都無法生效,因此這邊討論的是用 dCode 算 IC 的解法
首先到 [Index of Coincidence](https://www.dcode.fr/index-coincidence) ,算一下它的 IC 值,可以發現是 0.03896 ,低於英文的銘文 IC 值 0.0667,這代表它很可能是個多表替換的加密。
此時再試一下 CALCULATE PROBABLE KEY-LENGTHS 的功能,發現最有可能的密鑰長度大約是 20 ,此時再回去 [Vigenere Cipher](https://www.dcode.fr/vigenere-cipher) 那邊,在 Knowing the key-length/size, number of letters 輸入剛剛估計的 20,就會發現解出來的明文是正確的。
```
cvqynotfqqpvvlwzrtlg
```